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

C# 链式调用多个LINQ方法时会多次枚举集合吗?

直接结论

你给出的示例代码中,myList只会被枚举1次,不会因为链式调用了Where和Select两个方法就枚举2次。

具体原理

  • LINQ绝大多数返回IEnumerable<T>的标准查询运算符默认都是延迟执行的:你写的Where、Select调用只是在拼接查询逻辑,不会立刻遍历源集合,只有当你实际触发查询执行时(比如调用ToList()、ToArray()、用foreach遍历查询结果、或者对结果调用Count()/First()这类聚合方法),才会真正开始遍历源集合。
  • 执行时所有链式拼接的操作会合并成单次遍历逻辑:每从myList取出一个元素,就依次经过所有你定义的筛选、变换逻辑,符合条件就输出结果,不需要给每一步操作单独遍历一遍源集合。

普遍规则

只要你链式调用的都是延迟执行的LINQ方法,中间没有插入ToList()/ToArray()/ToDictionary()这类会立即执行、把结果缓存到新集合的操作,不管你链式调用多少个LINQ方法,源集合都只会被枚举1次。

注意:如果同一个查询对象被多次触发执行(比如你先把查询结果ToList一次,之后又用foreach遍历同一个查询对象),每次触发都会重新枚举一次源集合。如果源集合枚举开销大或者是动态变化的,建议主动调用ToList把结果缓存下来避免重复枚举。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:09:03