C# yield
Schlüsselwörter: Iteratoren und Leistungsoptimierung
yield
spielt in C# eine wichtige Rolle, da es die Implementierung von Enumeratoren und die Erstellung von Iteratoren vereinfacht und so die Lesbarkeit und Leistung des Codes erheblich verbessert. Schauen wir uns seine Funktionen genauer an.
Ergebnisse Schritt für Schritt zurückgeben (Yielding Results
)
yield
ermöglicht einer Methode, ihre Ausführung anzuhalten und Ergebnisse Schritt für Schritt zurückzugeben. Wenn die aufrufende Funktion ein Objekt durchläuft, das die IEnumerable
-Schnittstelle implementiert, wird die Methode, die das Schlüsselwort yield
enthält, bis zum Ende der Rückgabesequenz wiederholt aufgerufen. Dieser Mechanismus wird als „Nachgeben“ bezeichnet.
Betrachten Sie beispielsweise den folgenden Codeausschnitt:
<code class="language-csharp">IEnumerable<object> FilteredList() { foreach (object item in FullList) { if (IsItemInPartialList(item)) yield return item; } }</code>
FilteredList()
-Methode gibt basierend auf Bedingungen schrittweise Objekte aus FullList
zurück. Während der Aufrufer die Ergebnisse durchläuft, gibt die Methode jede Übereinstimmung einzeln zurück.
Iterator implementieren (Implementing Iterators
)
yield
vereinfacht die Erstellung benutzerdefinierter Iteratoren. In früheren Versionen von C# mussten Enumeratoren manuell mithilfe von IEnumerator
-Objekten implementiert werden. yield
bietet einen saubereren, deklarativeren Ansatz:
<code class="language-csharp">public IEnumerable<int> Integers() { yield return 1; yield return 2; yield return 4; yield return 8; yield return 16; yield return 16777216; }</code>
Dieser Code gibt eine Folge von Ganzzahlen ohne explizite Iterationslogik zurück.
Praktische Anwendung (Real-Life Usage
)
In praktischen Anwendungen wird yield
häufig in Lazy-Evaluations-Szenarien verwendet, beispielsweise beim Abrufen von Daten aus einer Datenbank. Betrachten Sie das folgende Beispiel:
<code class="language-csharp">public IEnumerable<T> Read<T>(string sql, Func<IDataReader, T> make, params object[] parms) { using (var connection = CreateConnection()) { using (var command = CreateCommand(CommandType.Text, sql, connection, parms)) { command.CommandTimeout = dataBaseSettings.ReadCommandTimeout; using (var reader = command.ExecuteReader()) { while (reader.Read()) { yield return make(reader); } } } } }</code>
Diese Methode erstellt einen Enumerator, ruft die Datensätze aus der Datenbanktabelle ab und erstellt ein Objekt vom Typ T basierend auf der bereitgestellten Zuordnungsfunktion make()
. Durch die Verwendung von yield
vermeidet diese Methode das Laden des gesamten Ergebnissatzes in den Speicher und verbessert so die Leistung bei der Verarbeitung großer Datensätze.
Das obige ist der detaillierte Inhalt vonWie funktioniert das Keyword von `rendat` in C#, um Iteratoren zu erstellen und die Leistung zu verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!