通过 getter 访问列表导致堆栈溢出
Accessing list via getter causes stack overflow
我有两个 classes MenueController
和 SaveMenue
.
保存菜单
在 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 TextElements
为 TextElements
调用 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;
}
}
我有两个 classes MenueController
和 SaveMenue
.
保存菜单
在 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 TextElements
为 TextElements
调用 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;
}
}