setter上的StackOverflow运行时错误

时间:2016-09-05 16:43:20

标签: c# arrays stack-overflow setter

此代码给出了System.StackOverflow运行时错误:

class blue
{
    public pawn[] p
    { 
        get { return p; } 
        set /*it points to this curly bracket*/{ p = value; } 
    }

    public blue()
    {
        p = new pawn[8];
    }
}

1 个答案:

答案 0 :(得分:5)

当然可以!您在p的设置器中设置值p。这会导致方法调用的无限递归,这会导致溢出可用的"堆栈"执行方法的空间。

看起来你只想要一个汽车财产:

public pawn[] p { get; set; }

或者,如果您确实需要明确的支持字段,请以不同方式命名

private pawn[] _p;
public pawn[] p
{ 
    get { return _p; } 
    set { _p = value; } 
}

(免责声明:我绝对讨厌强调私有变量,但这证明了答案,同时让我感到有点恶心)