C# 堆栈溢出状态
本文关键字:状态 栈溢出 堆栈 | 更新日期: 2024-11-05 05:38:45
在我的基类中,其他基类继承的基类具有以下属性:
private int DEFAULT_DISPLAY_ORDER = 999999;
private DateTime DEFAULT_DT = new DateTime(1111,1,1);
public int? Id {
get
{
return Id.GetValueOrDefault(0);
}
set
{
if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
Id = value;
}
}
public String Description { get; set; }
public int? DisplayOrder { get; set; }
但是当我执行它时,我收到此错误:
+ $exception {
Cannot evaluate expression because the current thread is in a stack
overflow state.}
System.Exception {System.StackOverflowException}
在线
if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
这到底是怎么回事?
看看这个:
public int? Id {
get
{
return Id.GetValueOrDefault(0);
}
在这里,访问Id
需要您首先获取... Id
.砰。
下一个:
set
{
if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
Id = value;
}
请看第二部分。为了设置Id
,您必须...打电话给二传手Id
.砰。
为此需要一个字段:
private int? id;
// Now use the field in the property bodies
public int? Id {
get
{
return id.GetValueOrDefault(0);
}
set
{
if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
id = value;
}
}
你从自身内部调用 Id - 无限递归...不好:)
public int? Id {
get
{
return Id.GetValueOrDefault(0); // This will keep calling the getter of Id. You need a backing field instead.
}
set
{
if (DisplayOrder == null) DisplayOrder = DEFAULT_DISPLAY_ORDER;
Id = value; // And here...
}
}
ID = value
将引发循环。你应该有一个像 _id
这样的私有变量,并在属性的 setter 和 getter 部分中使用它。
您正在创建一个无限循环,因为您在 Get 和 Id 属性:P集中引用 Id 属性。所以在得到,你会得到得到;)。在集合中,您正在设置。奇怪吧?:)
Id = value;
这确实如此。您正在对同一属性中的属性执行递归赋值。
当你调用 Id 时,它会一遍又一遍地递归调用 Id。
return Id.GetValueOrDefault(0);