繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM