当集运行时 "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();
}