通过 getter 访问列表导致堆栈溢出

Accessing list via getter causes stack overflow

我有两个 classes MenueControllerSaveMenue.

保存菜单

SaveMenue 中,我有一个名为 textElements<Text> 类型的私有列表变量,它有一个 getter.

private List<Text> textElements = new List<Text>();
public List<Text> TextElements {
    get {
        return TextElements;
    }
}

菜单控制器

MenueController 中,我创建了 class SaveMenue 的对象,然后尝试了这个:

...
SaveMenue = new SaveMenue(savePanel);
...        
Debug.Log(SaveMenue.TextElements[SaveMenue.SelectedIndex].name.ToLower());

但我得到 **WhosebugException: The requested operation caused a stack overflow.**


保存菜单

但是,如果我将 textElements 更改为 public 并删除 getter...

public List<Text> textElements = new List<Text>();

菜单控制器

...然后像这样尝试:

Debug.Log(SaveMenue.textElements[SaveMenue.SelectedIndex].name.ToLower());

然后就可以了,没有出现栈溢出异常

为什么我使用getter会出现堆栈溢出?

谢谢。

return TextElementsTextElements 调用 getter。 Return 改为支持字段。

private List<Text> textElements = new List<Text>();
public List<Text> TextElements {
    get {
        return textElements;
    }
}

您可以通过在私有字段前加上下划线来防止此类错误的发生。那么你一目了然:如果你的 getter 得到(或你的 setter 设置)没有下划线前缀的东西,你需要修复它。 Intellisense 不区分大小写,但它永远不会将 _ 误认为是 T

private List<Text> _textElements = new List<Text>();
public List<Text> TextElements {
    get {
        return _textElements;
    }
}