当集运行时 "Process is terminated due to StackOverflowException."
When set runs "Process is terminated due to StackOverflowException."
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 之间的数字。
当我 运行 它编译但打印 "Process is terminated due to WhosebugException."。
当我写了一行,每次设置 运行s in 打印一些东西时,它一遍又一遍地打印它,直到它抛出错误。
又是你啊。我以为你明白哪里出了问题 。您不能在 getters 或 setters 中调用属性名称。它将导致无限循环。您需要一个支持字段。
问题出在您的 属性 上。您正在返回 属性 本身,这会导致无限循环 (Whosebug
)。
改成这样:
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();
}
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 之间的数字。 当我 运行 它编译但打印 "Process is terminated due to WhosebugException."。 当我写了一行,每次设置 运行s in 打印一些东西时,它一遍又一遍地打印它,直到它抛出错误。
又是你啊。我以为你明白哪里出了问题
问题出在您的 属性 上。您正在返回 属性 本身,这会导致无限循环 (Whosebug
)。
改成这样:
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();
}