Ho affrontato uno strano problema. Qui ho riprodotto il problema.IEnumerable repeats function
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
Fino ad ora, ho pensato che le funzioni di Linq venissero eseguite quando vengono chiamate. Ma, con questo metodo, dopo aver chiamato lo ToList
, la funzione Linq OrderBy
viene eseguita nuovamente. Perchè è così?
Vedere [Esecuzione query] (https://msdn.microsoft.com/en-us/library/vstudio/bb738633 (v = vs.100) .aspx): "Le query LINQ vengono sempre eseguite quando la variabile di query è ripetuto su, non quando viene creata la variabile di query. Si chiama esecuzione differita. " –
@Idle_Mind È necessario aggiungere che questa è la documentazione per * l'esecuzione differita. * Non tutti i metodi LINQ vengono eseguiti in fase di iterazione. –