2010-08-06 9 views
12

Die Methode gibt IEnumerable über eine Yield-Return-Anweisung zurück.Wenn Rendite nie eintritt, wird Null zurückgegeben?

Wenn die Yield-Anweisung niemals auftritt (innerhalb der Bedingungslogik), gibt die Methode null zurück oder gibt sie eine Enumerable mit einer Zählung von 0 zurück?

Antwort

16

Ein gültiges IEnumerable, das bei der Iteration keine Werte erzeugt.

Denken Sie daran: Sie können den IEnumerable-Generator in einer Variablen speichern - der Code selbst wird nur ausgeführt, wenn Sie die Ergebnisse tatsächlich durchlaufen. Wie könnten Sie den Code ausführen, wenn Sie null hätten? Oder wie haben Sie wissen die Funktion ergibt nichts, ohne es zu laufen.

8

Letzteres - Sie werden in der Lage GetEnumerator() egal was, es wird nur keine Elemente zu zählen sein. Dies entspricht Enumerable.Empty<T>.

1

, nämlich 2,0 Programmierer, die zu starkem Gebrauch von Aufzählungen leant hätten ein Standardstück in ihren Toolkits von:

public static IEnumerable<T> EmptyEnum<T>() 
{ 
    yield break; 
} 

Vor System.Linq.Enumerable.Empty() kamen. In vielen Fällen sehr nützlich, gerade deshalb, weil es nicht null zurückgibt. Wenn beispielsweise GetIntEnum() eine Art von IEnumerable-Typ zurückgeben kann, aber auch null zurückgeben kann, gibt uns GetIntEnum() ?? Enumerable.Empty<T>() etwas, das immer sicher aufgezählt werden kann (vorausgesetzt, das ist der gewünschte Behaviour im Falle von Null-Ergebnissen).

Verwandte Themen