在C#中,foreach循环和for循环的区别。在for循环中可以创建新对象,但在foreach循环中不可以。

4

我一直很想知道为什么你可以在 for 循环中创建类 'SomeClass' 的新对象,但你不能在 foreach 循环中做同样的事情。

以下是示例:

SomeClass[] N = new SomeClass[10];

foreach (SomeClass i in N) 
{
   i = new SomeClass(); // Cannot assign to 'i' because it is a 'foreach iteration variable'
}

for (int i = 0; i < N.Length; i++) 
{
   N[i] = new SomeClass(); // this is ok
}

有人能为我解释一下这个场景吗?


1
请参见:http://msdn.microsoft.com/zh-cn/library/vstudio/ttw7t8t6.aspx - Ric
2个回答

4

3

foreach循环迭代IEnumerable对象。

内部代码如下:

using(var enumerator=N.GetEnumerator())
while(enumerator.MoveNext())
{
    enumerator.current=new SomeClass();//current is read only property so cant assign it
}

如上所述,在IEnumerator中,current属性是只读的,因此您无法对其进行赋值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接