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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top