私は奇妙な問題に直面しています。ここで私は問題を再現しました。IEnumerableが機能を繰り返す
Random r = new Random();
List<int> x = new List<int> {1, 2, 3, 4, 5, 6};
var e = x.OrderBy(i => r.Next());
var list1 = e.ToList();
var list2 = e.ToList();
bool b = list1.SequenceEqual(list2);
Console.WriteLine(b); // prints false
これまで、Linq関数は呼び出されたときに実行されると考えました。しかし、この方法では、ToList
というLinq関数OrderBy
をもう一度呼び出すと思われます。どうしてこんなことに?
[クエリの実行](https://msdn.microsoft.com/en-us/library/vstudio/bb738633(v=vs.100).aspx)を参照してください。「LINQクエリは、クエリ変数がクエリ変数が作成されたときではなく、繰り返されます。これは遅延実行と呼ばれます。 –
@Idle_Mind *遅延実行のドキュメントであることを追加する必要があります。*すべてのLINQメソッドが繰り返し実行されるわけではありません。 –