[英]Logic behind updating object List using 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...
没有ToList
第二个代码段只是一个查询。 您需要迭代才能实际执行它。 调用ToList
执行原始查询,并且由于在Select
您正在修改对象的属性,因此您会在原始列表中看到该效果(或副作用) 。 它与C#中的参数传递有关。 由于Select
中的lambda表达式是一个匿名方法,该方法正在接收列表的参数对象。 稍后,当您修改其属性之一时,您会看到效果。
同样,如果尝试将对象设置为null
,则不会看到副作用。
.Select(x => x = null).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.