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
}

谁能解释我这个场景?

4

2 回答 2

4

foreach迭代循环被称为“只读上下文”。您不能在只读上下文中分配给变量。

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

于 2013-07-21T18:07:47.427 回答
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的只读属性..所以你不能给它分配任何东西

于 2013-07-21T18:12:28.753 回答