C# 为什么我的数组初始化代码导致抛出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

我的类构造函数中的以下代码行正在抛出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) 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用于识别此特殊情况下的问题。如果您编写了支持字段的正确用法,这将是完美的;我可以说这是最有可能的原因,如果不是原因的话;我可以说这是最有可能的原因,如果不是原因的话。