LINQ risultati quando non ci sono partite?
-
20-09-2019 - |
Domanda
Che cosa fa esattamente una funzione di ritorno LINQ quando non ci sono partite? Prendere il metodo Dove, per esempio:
var numbers = Enumerable.Range(1, 10);
var results = numbers.Where(n => n == 50);
Quale sarebbe nei risultati a questo punto?
Soluzione
results
sé è solo una query. Fino a quando si inizia a scorrere attraverso di essa (esplicitamente o tramite una chiamata come Count()
), nulla ha verificato se ci sono risultati o meno. E 'solo quando si enumera in modo che qualsiasi cosa accadrà.
Così si potrebbe fare:
foreach (int x in results)
{
Console.WriteLine("This won't happen");
}
o
Console.WriteLine(results.Any()); // Will print false
Console.WriteLine(results.Count()); // Will print 0
Uno di questi farà sì che il predicato di essere valutata a fronte di ogni elemento della gamma ... ma prima di allora, non sarà chiamato a tutti.
Questa è una cosa importante da capire, perché vuol dire che results
potrebbe non essere null
pur mantenendo la caratteristica di valutazione pigra - fino a quando si è tentato di USE results
, non avrebbe funzionato se debba essere null
o no!
Altri suggerimenti
In questo caso si restituisce un IEnumerable<Int32>
con un conteggio di 0 articoli.
Un riferimento a un IEnumerable<T>
vuota.