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

带continue的foreach与LINQ Where过滤的foreach哪个更高效?

两种列表遍历方式的效率对比与优化方案

首先明确一个关键事实:LINQ的Where方法是延迟执行的——它不会在循环开始前全量枚举整个列表,而是在foreach遍历过程中,逐个取出原列表的元素,执行过滤条件,符合条件的才会进入循环体。

接下来对比两种方式的执行效率:

  • 第一种:foreach+continue
    代码示例:

    foreach (var obj in List)
    {
      if (obj.something == null)
      {
        continue;
      }
    
      // Do Stuff
    }
    

    这种方式只遍历列表一次,没有额外的委托调用开销,判断逻辑直接内联在循环里,执行效率很高。

  • 第二种:Where+foreach
    代码示例:

    foreach (var obj in List.Where(x => x.something != null))
    {
      // Do Stuff
    }
    

    虽然Where不会提前全量枚举,但它每次过滤元素都需要调用传入的lambda委托,这会带来微小但不可忽略的额外开销,所以整体效率会比第一种方式稍慢。

如果追求极致的执行速度,除了第一种方式外,还可以使用for循环直接通过索引访问(仅适用于List<T>这类支持快速索引的集合):

for (int i = 0; i < List.Count; i++)
{
    var obj = List[i];
    if (obj.something == null)
        continue;
    // Do Stuff
}

这种方式不需要创建枚举器对象,直接通过索引访问元素,避免了foreach枚举器的额外开销,在大量元素的场景下速度会比foreach+continue更快。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:42:07