c# - C# set/get 中的堆栈溢出错误

标签 c# asp.net exception

<分区>

周五,当我遇到堆栈溢出错误时,我正在处理一个应用程序的公共(public)评论部分,这让我很困惑,所以我想我应该寻求帮助。使用“堆栈溢出”这一表达方式搜索网络有点弄巧成拙!

在发送要添加到数据库的类的实例之前,我想对类中字段的 set 语句执行 HtmlEncode:

public class Feedback
{

    public Feedback() { }

    public string FeedbackComment
    {
        get { return FeedbackComment; }
        set {System.Web.HttpUtility.HtmlEncode(value); }
    }

    // other fields 

    // methods
}

这导致了 StackOverflow 错误,我已通过将代码更改为如下所示来修复错误:

public class Feedback
{

    public Feedback() { }

    private string feedbackComment;

    public string FeedbackComment
    {
        get { return feedbackComment; }
        set { feedbackComment = System.Web.HttpUtility.HtmlEncode(value); }
    }

    // other fields 

    // methods
} 

但我只是想解释为什么第一个 get/set 语句如此递归以至于它们导致堆栈溢出但是当恢复代码时看起来更像 c#2.0 工作?这可以用更短的语法来实现吗?如果可以,如何实现?

这是我关于 SO 的第一个问题 - 请尽量温和!

最佳答案

第一个示例的 getter 返回属性本身,而不是支持字段。

// The property name is "FeedbackComment"
public string FeedbackComment
{
    // And here you are returning "FeedbackComment" which is
    // creating the stack overflow
    get { return FeedbackComment; }
}

不幸的是,没有办法缩短您拥有的内容,自动实现的属性(即 public String FeedbackComment { get; set; })必须有空的 getter 和 setter block 才能在语法上正确。您的第二个示例没有任何问题 - 是的,它有点冗长,但它清晰、简洁,可以完成工作。

关于c# - C# set/get 中的堆栈溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2398219/

相关文章:

c++ - 为什么 google breakpad 不能处理所有崩溃?我该如何调试这些案例?

c# - 接口(interface)中的属性

c# - 在 C# .NET Web 服务中保留对象

asp.net - 错误 HTTP 404.11 通过查询字符串传递帐户激活 token

java - ActionListener 类中的哈希字符串 (SHA-256)

exception - 更改企业库异常处理格式化程序中的时间戳值

c# - 为什么子任务不会在 .ContinueWith 之前完成?

c# - 将 C# DateTime 转换为 C++ std::chrono::system_clock::time_point

c# - 检查 SELECT 语句条件是否为真

asp.net - 为什么代码会被 ASP 触发一次 :ImageButton Click not Triggered