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

时间:2017-10-27 17:27:40

标签: c# unity3d unity5

我有两个课程MenueControllerSaveMenue

SaveMenue

SaveMenue我有一个名为<Text>的{​​{1}}类型的私有列表变量,它有一个getter。

textElements

MenueController

private List<Text> textElements = new List<Text>(); public List<Text> TextElements { get { return TextElements; } } 我创建了一个类MenueController的对象,然后尝试了这个:

SaveMenue

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

SaveMenue

但是,如果我将**StackOverflowException: The requested operation caused a stack overflow.**更改为公开并删除getter ...

textElements

MenueController

...并尝试这样:

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

然后它工作,没有堆栈溢出异常。

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

感谢。

1 个答案:

答案 0 :(得分:3)

return TextElements调用TextElements的getter。返回支持字段。

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

您可以通过在私有字段前加下划线来阻止此类错误的发生。然后你就会一眼就知道:如果你的getter得到(或你的setter设置)没有下划线前缀的东西,你需要修复它。智能感知是盲目的,但它不会将_误认为是T

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