erwartete ich die Implementierung von Enumerable.Empty() dabei, um nur:Warum gibt Enumerable.Empty() ein leeres Array zurück?
public static IEnumerable<TResult> Empty<TResult>()
{
yield break;
}
Aber die Umsetzung ist in etwa so:
public static IEnumerable<TResult> Empty<TResult>()
{
return EmptyEnumerable<TResult>.Instance;
}
internal class EmptyEnumerable<TElement>
{
private static volatile TElement[] instance;
public static IEnumerable<TElement> Instance
{
get
{
if (EmptyEnumerable<TElement>.instance == null)
EmptyEnumerable<TElement>.instance = new TElement[0];
return (IEnumerable<TElement>)EmptyEnumerable<TElement>.instance;
}
}
}
Warum funktioniert die Implementierung als nur eine Zeile komplexer von Code? Gibt es einen Vorteil, ein zwischengespeichertes Array zurückzugeben und nicht (Ausbeute) keine Elemente zurückzugeben?
Hinweis: Ich werde mich nie auf die Implementierungsdetails einer Methode verlassen, aber ich bin nur neugierig.
'Ausbeute break' eine Zeile in C# ist, aber es ist viel komplexer, wenn Sie schauen am generierten IL-Code. – Dirk