【问题标题】:StackOverflow runtime error on setter [duplicate]setter上的StackOverflow运行时错误[重复]
【发布时间】:2017-01-13 01:39:52
【问题描述】:

这段代码给了我一个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];
    }
}

【问题讨论】:

    标签: c# arrays stack-overflow setter


    【解决方案1】:

    当然可以!您正在为p 设置值p。这会导致方法调用的无限递归,从而溢出用于执行方法的可用“堆栈”空间。

    看起来你只是想要一个自动属性:

    public pawn[] p { get; set; }
    

    或者,如果你真的想要一个显式的支持字段,那就换个名字

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

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

    【讨论】:

    • 你应该指出这会创建一个infinite loop,这会导致imo溢出
    • @DarkBee 好吧,这不是循环,而是无限递归
    • @slawekwin 点 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多