【发布时间】:2013-02-27 14:21:26
【问题描述】:
如果我有如下循环:
foreach (string pass in new string[] { "pass1", "pass2", "pass3" })
{
x = pass; //etc
}
匿名字符串数组是最初创建一次,还是每次传递都重新创建一次?
我相信前者,但同事们相信这是一个等待发生的错误,因为他们说 foreach 循环的每次迭代都会导致创建一个新的字符串数组。
VS 反汇编代码表明我是对的,但我想确定一下。
我们正在研究这个问题的原因是试图了解一个神秘的错误,该错误报告一个集合在迭代时已被更改。
【问题讨论】:
-
您可以轻松地对其进行测试,例如使用
DateTime值代替字符串,并在每次迭代中检查成员。 -
另一种向他们展示它只评估一次的方法是在调试模式下单步执行代码。创建字符串数组的代码只会高亮一次。
-
或
new string[] { "pass1", "pass" + i++, "pass3" } -
“一个神秘的错误,它报告集合在迭代时已被更改” - 为什么不将其作为问题发布?
-
“一个神秘的错误,它报告集合在迭代时已被更改。” - 这表明您有从循环内的集合中删除项目的代码。这就是你应该寻找的东西