当我尝试覆盖get和set函数时,我不确定导致StackOverflowException的原因。当我只使用默认的get并设置它时可以工作。
enum MyEnumType
{
....
}
public MyEnumType data { get; set; }
但是当我尝试添加其他数据时,它会抛出StackOverflowException
public MyEnumType data
{
get
{
return data;
}
set
{
data = value;
}
}
有什么想法吗?当我为asp .net用户控件属性执行此操作时,没有问题。我想知道为什么它导致正常枚举数据类型的StackOverflowException。
答案 0 :(得分:28)
是的,你没有支持领域......你应该这样做:
private MyEnumType data;
public MyEnumType Data
{
get
{
return data;
}
set
{
data = value;
}
}
发生的事情是你指的是要返回的属性,这会导致无限循环尝试访问自己的值。因此,StackOverFlow。
如果你没有在get和set方法中添加任何额外的逻辑,你也可以使用自动属性。这简单地定义如下:
public MyEnumType Data
{
get;
set;
}
答案 1 :(得分:6)
您正在getter和setter中引用属性本身,这会导致无限递归(堆栈溢出)。如果您使用了标准命名约定(数据),那将更加明显 尝试类似:
private MyEnumType _data;
public MyEnumType Data
{
get { return _data; }
set { _data = value; }
}
答案 2 :(得分:3)
public class MyClass
{
string propertyString;
public string MyPropertyString
{
get
{
return propertyString;
}
set
{
propertyString = value;
}
}
}
属性名称必须与成员名称不同。
答案 3 :(得分:0)
在setter / getter中放置一个断点并调试,确保你使用step into(F11)而不是跳过 - 这应该有助于解释最新进展。