我有一个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...
答案 0 :(得分:2)
您的第二个没有ToList
的代码段只是一个查询。您需要迭代才能实际执行它。调用ToList
执行原始查询,因为在Select
中您正在修改对象的属性,您会在原始列表中看到效果(或副作用)。它与参数传递C#有关。由于Select
中的lambda表达式是一个匿名方法,它接收列表的参数对象。稍后当您修改其中一个属性时,您会看到效果。
同样,如果您尝试将对象设置为null
,则不会看到副作用。
.Select(x => x = null).ToList();