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

本文关键字:循环 for 对象 foreach 但在 不可能 Foreach 中的 创建 新对象 | 更新日期: 2023-09-27 18:24:12

我一直想知道为什么您可以在中为循环创建类"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
}

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

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

foreach迭代循环称为"只读上下文"不能在只读上下文中为变量赋值。

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

Foreach循环在IEnumerable对象上迭代。。

在内部,上述代码变为

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

如上所述,当前属性是IEnumerator的只读属性。。所以你不能给它分配任何东西