我有两个课程MenueController
和SaveMenue
。
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,为什么会出现堆栈溢出?
感谢。
答案 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;
}
}