当set运行时,由于StackOverflowException导致进程终止
本文关键字:进程 终止 StackOverflowException 由于 set 运行时 | 更新日期: 2023-09-27 18:16:51
private E_Color Color {get; set;}
private int Number
{
get { return Number; }
set
{
if ((value >= 2) && (value <= 14))
Number = value;
}
}
public Card(int color, int num)
{
Color = (E_Color)color;
Number = num;
}
我很确定问题出在Number中,但我不知道如何使get像Color中那样,但使它只能是2-14之间的数字。当我在编译中运行它,但打印"进程因StackOverflowException而终止。"。当我写了一行,每次set运行时,它都会打印一些东西,它会一遍又一遍地打印它,直到抛出错误。
又来了。我以为你知道哪里不对(参考)。你不能在getter或setter中调用属性名。它将导致一个无限循环。你需要一个后备字段。
问题出在你的财产上。您正在返回属性本身,这会导致无限循环(Stackoverflow
)。
改成:
private int num = 0;
private int Number
{
get { return num; }
set
{
if ((value >= 2) && (value <= 14))
num = value;
}
}
在您的情况下,您将需要一个后备字段,因为您在将值设置为num
之前要进行一些检查。
你所做的(当在getter或setter中引用属性名称时)基本上是这样的:
private int GetNumber()
{
return GetNumber();
}