当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运行时,它都会打印一些东西,它会一遍又一遍地打印它,直到抛出错误。

当set运行时,由于StackOverflowException导致进程终止

又来了。我以为你知道哪里不对(参考)。你不能在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();
}