This question already has answers here:
Stack overflow exception in C# setter

(4个答案)


在6个月前关闭。




我不确定覆盖get和set函数的原因是什么导致StackOverflowException。当我只使用默认的get和set时,它就可以工作。
enum MyEnumType
{
....
}

public MyEnumType data { get; set; }
但是,当我尝试添加其他数据时,它将引发StackOverflowException:
public MyEnumType data
{
  get
  {
    return data;
  }
  set
  {
    data = value;
  }
}
有任何想法吗?当我为ASP.NET用户控件属性执行此操作时,没有任何问题。为什么会导致普通枚举数据类型的StackOverflowException?

最佳答案

是的,您没有支持域...这是您应该这样做的方式:

private MyEnumType data;

public MyEnumType Data
{
  get
  {
    return data;
  }
  set
  {
    data = value;
  }
}
发生的情况是,您引用该属性以返回自身,这将导致尝试访问其自身值的无限循环。因此,堆栈溢出。
如果您没有在get和set方法中添加任何其他逻辑,则也可以使用自动属性。就像这样简单地定义:
public MyEnumType Data
{
  get;
  set;
}

关于c# - 重载getter和setter会导致C#中的堆栈溢出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1437791/

10-10 06:00