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
}
有人能给我解释一下这种情况吗?
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的只读属性。。所以你不能给它分配任何东西