我尝试使用.ForEach()方法将操作应用于列表,但未应用该操作。这是我正在做的一个例子:
floatList.ForEach(f => f = 0);
这不是应用我在lambda表达式中执行的操作。当我使用普通的for循环执行相同的操作时,它会正确执行。我试过查找解释ForEach()方法与普通foreach或for循环之间差异的线程,但我仍然不确定为什么它没有执行我在.ForEach()中放入的命令方法
答案 0 :(得分:3)
在lambda中分配给f
的问题是f
是按值传递的。对f
本身的任何更改都不会反映在集合中的实际值或IEnumerable
中。 foreach
循环会出现同样的问题,但f
无法分配。另一方面,常规for
循环可以直接对集合进行操作,因此没有这个问题。
请注意,虽然不允许更改项目本身,但您可以调用其可变方法,并且更改将保留:
floatList.ForEach(f => f.SetSomeValue(0));
答案 1 :(得分:1)
不确定您的期望是什么。我想你必须向我们展示你的#34;正常循环"比较。
但是你的代码实际上相当于:
foreach(float readOnlyF in floatList)
{
float f = readOnlyF;
f = 0;
}
它基本上为您分配的本地f
变量赋值,但在迭代完成后会立即丢弃。它并没有尝试写入floatList
,如果这是你所期待的。