Foreach vs for C#循环。在for循环中可以创建新对象,但在foreach循环中不可能

时间:2013-07-21 18:01:29

标签: c# for-loop foreach

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

示例如下:

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
}

有人能解释一下这种情况吗?

2 个答案:

答案 0 :(得分:4)

foreach迭代循环称为“只读上下文”。您无法在只读上下文中分配变量。

了解更多信息:http://msdn.microsoft.com/en-us/library/369xac69.aspx

答案 1 :(得分:3)

Foreach循环遍历IEnumerable对象..

内部上面的代码变为

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

如上文评论current中所述,属性是IEnumerator只读属性。所以你无法为其分配任何东西