我一直想知道为什么你可以在 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
}
有人能解释一下这种情况吗?
答案 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的只读属性。所以你无法为其分配任何东西