Heim > Backend-Entwicklung > C++ > Wie funktioniert das Keyword von `rendat` in C#, um Iteratoren zu erstellen und die Leistung zu verbessern?

Wie funktioniert das Keyword von `rendat` in C#, um Iteratoren zu erstellen und die Leistung zu verbessern?

Linda Hamilton
Freigeben: 2025-01-27 17:41:08
Original
783 Leute haben es durchsucht

How Does the `yield` Keyword Work in C# to Create Iterators and Improve Performance?

C# yield Schlüsselwörter: Iteratoren und Leistungsoptimierung

Das Schlüsselwort

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)

Das Schlüsselwort

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>
Nach dem Login kopieren
Die

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)

Das Schlüsselwort

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage