我在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)