一致するものがない場合、LINQ 関数は正確に何を返しますか? たとえば、Where メソッドを使用します。
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
この時点での結果はどうなるでしょうか。
一致するものがない場合、LINQ 関数は正確に何を返しますか? たとえば、Where メソッドを使用します。
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
この時点での結果はどうなるでしょうか。
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
results
null
この場合、IEnumerable<Int32>
アイテム数が0のを返します。
空への参照IEnumerable<T>
。