当设置运行"由于StackOverflowException,进程终止。"

时间:2015-10-09 12:13:18

标签: c# accessor

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中的设置,但我不知道如何使得像颜色中的那个得到但是设置它因此它只能是2-14之间的数字。 当我在编译中运行它但打印&#34;由于StackOverflowException,进程终止。&#34;。 当我写了一行,每次设置运行时都会打印出来的东西,它会一遍又一遍地打印出来,直到它抛出错误。

1 个答案:

答案 0 :(得分:1)

啊你又来了。我以为你明白了什么是错的(reference)。您无法在其内部的getter或setter中调用属性名称。它会导致无限循环。你需要一个支持领域。

问题出在您的财产中。您将返回属性本身,这会导致无限循环(Arrays.stream(dataSet.getData()).forEach(System.out::println); )。

将其更改为:

Stackoverflow

在您的情况下,您需要一个支持字段,因为在将值设置为private int num = 0; private int Number { get { return num; } set { if ((value >= 2) && (value <= 14)) num = value; } } 之前,您正在进行一些检查。

你基本上在做什么(当引用它里面的属性名称&#39; s getter或setter)是这样的:

num