代码之家  ›  专栏  ›  技术社区  ›  jasonh

没有匹配项时的LINQ结果?

  •  8
  • jasonh  · 技术社区  · 15 年前

    当没有匹配项时,LINQ函数究竟返回什么?以Where方法为例:

    var numbers = Enumerable.Range(1, 10);
    var results = numbers.Where(n => n == 50);
    

    此时的结果是什么?

    3 回复  |  直到 15 年前
        1
  •  10
  •   Jon Skeet    15 年前

    results 它本身只是一个查询。直到您开始迭代它(显式地或通过类似调用 Count() )没有检查是否有结果。只有当你列举出来的时候,一切才会发生。

    所以你可以这样做:

    foreach (int x in results)
    {
        Console.WriteLine("This won't happen");
    }
    

    或:

    Console.WriteLine(results.Any()); // Will print false
    Console.WriteLine(results.Count()); // Will print 0
    

    任何这些都将导致谓词对范围内的每个项进行计算…但在那之前,它根本不会被调用。

    这是一件很重要的事情,因为这意味着 结果 不能 null 同时保留了懒惰评估的特性-直到你试图 使用 结果 不知道是否应该 无效的 或不是!

        2
  •  4
  •   Ahmad Mageed    15 年前

    在这种情况下,它返回 IEnumerable<Int32> 计数为0项。

        3
  •  3
  •   Quintin Robinson    15 年前

    对空的引用 IEnumerable<T> .