You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么修改LINQ查询返回的枚举对象属性后,再次枚举修改结果不生效?

问题原因

这是LINQ的延迟执行(惰性求值)特性导致的,具体逻辑如下:

  • 你定义var orders = dict.Select(a => new Order { Id = a.Key, OrdNumber = a.Value })时,orders变量保存的只是「查询规则」,并不会立刻执行Select里的转换逻辑、生成Order实例。
  • 每一次用foreach遍历orders时,这个查询都会被重新执行一遍:每次遍历都会重新从字典中取原始数据,调用new Order生成全新的Order对象。
  • 第一次foreach遍历时,你修改的是本次遍历新生成的Order对象属性,遍历结束后这些临时对象就被回收了,没有被持久化保存。
  • 第二次foreach遍历orders时,查询再次执行,生成了全新的一批Order实例,这些实例的属性自然还是字典中存储的原始值,所以输出没有*后缀。

为什么加.ToList()就能解决

调用.ToList()时,会立刻触发LINQ查询的执行,把生成的所有Order对象都存储到内存的List集合中。后续不管遍历多少次,操作的都是同一个List里的同一批对象,第一次遍历修改的属性会被保留,第二次遍历自然就能输出带*后缀的结果。


内容的提问来源于stack exchange,提问作者Masoud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 17:27:00