使用linq更新对象列表的逻辑

时间:2014-06-19 16:31:04

标签: c# linq

我有一个POCO对象列表,为什么会出现以下代码:

elements.Where(x => x.Param1 == "M").Select(x => x.Param2= "").ToList();

(TL; DR;在param1等于M的每个元素上设置param2 =“”)

在这个时更新枚举:

elements.Where(x => x.Param1 == "M").Select(x => x.Param2= "");

不更新吗?

请注意,我既没有elements = elements.Where...也没有var results = elements.Where...

1 个答案:

答案 0 :(得分:2)

您的第二个没有ToList的代码段只是一个查询。您需要迭代才能实际执行它。调用ToList执行原始查询,因为在Select中您正在修改对象的属性,您会在原始列表中看到效果(或副作用)。它与参数传递C#有关。由于Select中的lambda表达式是一个匿名方法,它接收列表的参数对象。稍后当您修改其中一个属性时,您会看到效果。

同样,如果您尝试将对象设置为null,则不会看到副作用。

.Select(x => x = null).ToList();