C# 为什么我的数组初始化代码导致抛出StackOverflowException?
我的类构造函数中的以下代码行正在抛出StackOverflowException:C# 为什么我的数组初始化代码导致抛出StackOverflowException?,c#,arrays,stack-overflow,C#,Arrays,Stack Overflow,我的类构造函数中的以下代码行正在抛出StackOverflowException: myList = new string[]{}; // myList is a property of type string[] 为什么会这样?初始化空数组的正确方法是什么 更新:原因是在setter中,我试图修剪所有值: set { for (int i = 0; i < myList.Length; i++) { if (myList[i] != null) myL
myList = new string[]{}; // myList is a property of type string[]
为什么会这样?初始化空数组的正确方法是什么
更新:原因是在setter中,我试图修剪所有值:
set
{
for (int i = 0; i < myList.Length; i++)
{
if (myList[i] != null) myList[i] = myList[i].Trim();
}
}
这将创建一个包含0个元素的数组
编辑:我刚刚测试了新字符串[]{},它适合我。可能你的堆栈溢出的原因在别处
你能把剩下的方法贴出来吗?一般说来,在执行大量递归方法调用时,会发生堆栈溢出。像这样:
void MyMethod(int i)
{
MyMethod(i); //!StackOverFlow!
}
这将创建一个包含0个元素的数组
编辑:我刚刚测试了新字符串[]{},它适合我。可能你的堆栈溢出的原因在别处
你能把剩下的方法贴出来吗?一般说来,在执行大量递归方法调用时,会发生堆栈溢出。像这样:
void MyMethod(int i)
{
MyMethod(i); //!StackOverFlow!
}
如果myList是一个属性,您是否检查过它的setter的主体没有递归地分配给它自己而不是backing字段,如中所示:
private string[] _myList;
public string[] myList {
get {
return _myList;
}
set {
_myList = value;
}
}如果myList是一个属性,您是否检查过它的setter的主体没有递归地分配给它自己而不是backing字段,如:
private string[] _myList;
public string[] myList {
get {
return _myList;
}
set {
_myList = value;
}
}似乎@Jonas H所说的是正确的,您可能正在递归地修改属性,而不是其背景字段 错 对
似乎@jonash所说的是正确的,您可能正在递归地修改属性,而不是它的支持字段 错 对 您的集合代码实际上并不分配任何内容,而是引用自身。我感觉你误解了房产的运作方式。您需要属性操作的支持变量:
private string[] _myList;
然后,您需要让设置代码与该变量一起工作:
public string[] myList
{
get
{
return _myList;
}
set
{
_myList = value; // you have to assign it manually
for (int i = 0; i < _myList.Length; i++)
{
if (_myList[i] != null) _myList[i] = _myList[i].Trim();
}
}
}
如果您尝试访问myList,它会访问自身,然后访问自身,等等,导致无限递归和堆栈溢出。您的设置代码实际上没有分配任何内容,而是引用自身。我感觉你误解了房产的运作方式。您需要属性操作的支持变量:
private string[] _myList;
然后,您需要让设置代码与该变量一起工作:
public string[] myList
{
get
{
return _myList;
}
set
{
_myList = value; // you have to assign it manually
for (int i = 0; i < _myList.Length; i++)
{
if (_myList[i] != null) _myList[i] = _myList[i].Trim();
}
}
}
如果你尝试访问myList,它会访问自身,然后访问自身,等等,导致无限递归和堆栈溢出。不,仍然得到StackOverflowException。不,仍然得到StackOverflowException。你能发布整个构造函数吗?看起来问题的真正原因可能是在另一行。你能发布你的构造函数的全部内容吗?看起来问题的真正原因可能在另一条线上。+1用于在这种特殊情况下识别问题。如果您编写了支持字段的正确用法,这将非常完美。+1用于识别此特殊情况下的问题。如果您编写了支持字段的正确用法,这将是完美的;我可以说这是最有可能的原因,如果不是原因的话;我可以说这是最有可能的原因,如果不是原因的话。