为什么我们不能指定一个foreach迭代变量,而我们完全可以与访问者进行修改? [英] Why can't we assign a foreach iteration variable, whereas we can completely modify it with an accessor?
问题描述
我只是好奇这个:以下code将无法编译,因为我们无法修改foreach迭代变量:
I was just curious about this: the following code will not compile, because we cannot modify a foreach iteration variable:
foreach (var item in MyObjectList)
{
item = Value;
}
但下面将编译和运行:
But the following will compile and run:
foreach (var item in MyObjectList)
{
item.Value = Value;
}
为什么是第一个无效的,而第二个可以做同样的下方(我正在寻找正确的英语前pression这一点,但我不记得了。根据...?^^)
Why is the first invalid, whereas the second can do the same underneath (I was searching for the correct english expression for this, but I don't remember it. Under the...? ^^ )
推荐答案
的foreach是一个只读迭代器,迭代动态地实现IEnumerable的类,在的foreach每次循环调用了IEnumerable获得下一个项目,你有产品只读参考,不能重新分配它,而只是调用 item.Value
正在访问并赋予一定的参考价值读/写属性的,但仍参考项的只读参考。
foreach is a read only iterator that iterates dynamically classes that implement IEnumerable, each cycle in foreach will call the IEnumerable to get the next item, the item you have is a read only reference, you can not re-assign it, but simply calling item.Value
is accessing it and assigning some value to a read/write attribute yet still the reference of item a read only reference.
这篇关于为什么我们不能指定一个foreach迭代变量,而我们完全可以与访问者进行修改?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!