我一直对这个感到困惑。考虑以下循环:
int [] list = new int [] { 1, 2, 3 };
for (int i=0; i < list.Length; i++) { }
foreach (int i in list) { }
while (list.GetEnumerator().MoveNext()) { } // Yes, yes you wouldn't call GetEnumerator with the while. Actually never tried that.
int List{get{return(new int [] {1,2,3});}}
?这会扰乱循环吗?如果没有,它会在每次迭代中创建一个新实例吗?答案 0 :(得分:6)
好:
for
循环在每次迭代时检查list.Length
;你实际上并没有在循环中访问list
,所以内容将是无关紧要的foreach
循环仅使用list
来获取迭代器;将其更改为引用不同的列表没有区别,但如果您在结构上修改了列表本身(例如,通过添加值,如果这实际上是List<int>
而不是int[]
),那就会使迭代器无效从根本上说,您需要了解数组内容与更改变量引用的对象之间的区别 - 然后给出一个非常具体的情况来解释。一般来说,foreach
循环只有在获取迭代器时才直接触及源表达式 - 而for
循环中没有魔法,并且它访问的频率只取决于关于代码 - 条件和&#34;步骤&#34; for
循环的一部分在每次迭代时执行,因此如果您在其中任何一个部分中引用该变量,您将看到任何更改......