9

一致するものがない場合、LINQ 関数は正確に何を返しますか? たとえば、Where メソッドを使用します。

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

この時点での結果はどうなるでしょうか。

4

3 に答える 3

12

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

これらのいずれかにより、範囲内の各項目に対して述語が評価されます...しかし、それ以前は、まったく呼び出されません。

これは、遅延評価の機能を保持している間results はできないことを意味するため、理解することが重要です。null resultsnull

于 2009-10-07T18:01:45.650 に答える
4

この場合、IEnumerable<Int32>アイテム数が0のを返します。

于 2009-10-07T17:50:47.793 に答える
3

空への参照IEnumerable<T>

于 2009-10-07T17:49:34.970 に答える