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

C# LINQ List Select查询连续执行返回结果不一致问题求助

问题原因

这是LINQ**延迟执行(惰性求值)**特性结合闭包变量修改导致的问题:

  • 你定义的completeItems没有存储实际的计算结果,只是保存了Select构造的查询逻辑,默认不会立即执行。
  • 每次调用Dump()遍历completeItems时,都会完整执行一遍Select中的委托代码。
  • 你在Select委托中修改了外部变量openValue,第一次执行完查询后,openValue已经被更新为最后一条数据的CloseValue也就是1700,第二次执行查询时初始值不再是你定义的1000,因此得到错误的计算结果。

修复方案

在查询构造完成后立即触发执行,把计算结果固化到本地集合中即可,只需要在Select后面追加ToList()或者ToArray():

var completeItems =
        items.Select(x =>
        {
            var item = new TestItem
            {
                EndDate = x.EndDate,
                OpenValue = openValue,
                CloseValue = x.CloseValue,
            };

            openValue = item.CloseValue;
            return item;
        }).ToList(); // 新增此行,立即执行查询并把结果存入List,后续操作不会再重新计算

修改后两次Dump()调用都会直接读取已经计算好的集合内容,输出结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:45:03