.ForEach()在正常循环时不应用

时间:2015-11-15 00:18:06

标签: c# foreach

我尝试使用.ForEach()方法将操作应用于列表,但未应用该操作。这是我正在做的一个例子:

floatList.ForEach(f => f = 0);

这不是应用我在lambda表达式中执行的操作。当我使用普通的for循环执行相同的操作时,它会正确执行。我试过查找解释ForEach()方法与普通foreach或for循环之间差异的线程,但我仍然不确定为什么它没有执行我在.ForEach()中放入的命令方法

2 个答案:

答案 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,如果这是你所期待的。