Verständnis C#'s yield
Schlüsselwort für eine effiziente Iteration
In C# 2.0 eingeführt wird das Schlüsselwort yield
die imperative Iteration erheblich optimiert. Betrachten Sie dieses Beispiel und veranschaulichen die Verwendung beim Erstellen eines IEnumerable<T>
:
IEnumerable<object> FilteredList() { foreach(object item in FullList) { if(IsItemInPartialList(item)) yield return item; } }
Diese Funktion erstellt keine vollständige Liste im Speicher. Stattdessen gibt es einen Iterator zurück. Jedes Mal, wenn die foreach
-Kleife in dem aufrufenden Code das nächste Element anfordert
FilteredList()
untersuchen wir ein einfacheres Beispiel: item
Debugugging dieses Code zeigt, dass
nicht vollständig ausführt. Es wird nur ausgeführt, bis es einpublic void Consumer() { foreach(int i in Integers()) { Console.WriteLine(i); } } public IEnumerable<int> Integers() { yield return 1; yield return 2; yield return 4; yield return 8; yield return 16; yield return 16777216; }
Schleife in Integers()
verursacht yield return
, um wieder aufzunehmen, und geht vom nächsten foreach
. Consumer()
fort
Integers()
Hauptvorteile der Verwendung yield return
:
yield
IEnumerable
IEnumerator
Speichereffizienz: Das obige ist der detaillierte Inhalt vonWie vereinfacht das Keyword von C# `rendite` die imperative Iteration?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!