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

本文关键字:背后 列表 linq 更新 对象 使用 | 更新日期: 2023-09-27 18:09:17

我有一个POCO对象列表,为什么下面的代码:

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

(TL,博士;set param2 = "

更新可枚举对象,而下面的

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

不更新吗?

注意我既不做elements = elements.Where...也不做var results = elements.Where...

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

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

同样,如果您尝试将对象设置为null,则不会看到副作用。
.Select(x => x = null).ToList();