为什么我得到System.OutOfMemoryException?

san*_*ngh -1 c#

我在c#中有以下代码片段.

 var list = new List<string> { "a", "b", "c" };
            for (int i = 0; i < list.Count; i++)
            {
                list.Add(list[i].ToUpper());
            }
Run Code Online (Sandbox Code Playgroud)

上面的代码中没有编译时错误,但我System.OutOfMemoryException在运行时遇到异常?

oxi*_*min 10

List.Count 每次添加元素时重新评估.

所以,你有3个元素.在for循环的第一次迭代之后,你将得到Count== 4.所以i永远不会达到Count值(直到整数溢出情况,但在你的情况下早于内存发生).

你可以写smth.喜欢:

var listInUpperCase = list.Select(x => x.ToUpper())
                          .ToList();

list.AddRange(listInUpperCase);
Run Code Online (Sandbox Code Playgroud)

  • 事实证明,@马特并不是无限的.;) (4认同)