Heim > Backend-Entwicklung > C++ > Wie ermöglicht das C#-Schlüsselwort „yield' eine effiziente Iteration über Sammlungen?

Wie ermöglicht das C#-Schlüsselwort „yield' eine effiziente Iteration über Sammlungen?

Susan Sarandon
Freigeben: 2025-01-27 17:46:13
Original
616 Leute haben es durchsucht

How Does the C# `yield` Keyword Enable Efficient Iteration Over Collections?

C# yield Schlüsselwort: Optimierung der Sammlungsiteration

Das C#-Schlüsselwort yield, das in C# 2.0 eingeführt wurde, bietet einen leistungsstarken Mechanismus zum Erstellen effizienter Iteratoren über Sammlungen. Dies ist besonders relevant, wenn es um große Datensätze oder Szenarien geht, bei denen nur ein Teil einer Sammlung offengelegt werden muss.

Funktionalität von yield

yield ermöglicht Methoden, ein IEnumerable-Objekt zurückzugeben. Diese Schnittstelle stellt eine Folge von Elementen dar, die mithilfe einer foreach-Schleife iteriert werden können. Entscheidend ist, dass yield nicht die gesamte Sammlung auf einmal in den Speicher geladen werden muss.

Wenn stattdessen eine foreach-Schleife eine yield-basierte Methode durchläuft, wird die Methode nur so lange ausgeführt, bis sie auf eine yield return-Anweisung trifft. Anschließend gibt es den zurückgegebenen Wert zurück und unterbricht die Ausführung. Die Methode nimmt die Ausführung erst wieder auf, wenn das nächste Element in der Iteration angefordert wird. Dabei handelt es sich im Wesentlichen um eine Zustandsmaschine, die bei Bedarf Werte generiert.

Anschauliches Beispiel

Stellen Sie sich eine Methode vor, die Elemente aus einer größeren Liste filtert:

<code class="language-csharp">IEnumerable<object> FilteredList(IList<object> fullList, IList<object> partialList)
{
    foreach (object item in fullList)
    {
        if (partialList.Contains(item))
            yield return item;
    }
}</code>
Nach dem Login kopieren

Hier gibt FilteredList nur die Elemente zurück, die sowohl in fullList als auch in partialList vorhanden sind. Es verarbeitet fullList jeweils ein Element und liefert nur diejenigen, die die Bedingung erfüllen. Dadurch wird vermieden, dass eine neue, möglicherweise große, gefilterte Liste im Speicher erstellt wird.

Praktische Anwendungen

Das Schlüsselwort yield wird häufig verwendet in:

  • Benutzerdefinierte Iteratoren: Erstellen von Iteratoren für benutzerdefinierte Datenstrukturen oder Algorithmen ohne den Aufwand, eine Sammlung vorab zu füllen.

  • Effizienter Datenabruf: Inkrementelles Abrufen von Daten aus Datenbanken oder anderen externen Quellen, wodurch der Speicherverbrauch reduziert und die Leistung verbessert wird. Betrachten Sie dieses Beispiel für das Lesen aus einer Datenbank:

<code class="language-csharp">public IEnumerable<T> ReadData<T>(string query, Func<IDataReader, T> mapper)
{
    using (var reader = ExecuteQuery(query))
    {
        while (reader.Read())
        {
            yield return mapper(reader);
        }
    }
}</code>
Nach dem Login kopieren

Dieser Ansatz ruft Datenbankzeilen einzeln ab und verarbeitet sie, was deutlich effizienter ist, als den gesamten Ergebnissatz in den Speicher zu laden.

Durch die Nutzung des Schlüsselworts yield können Entwickler elegante und effiziente Lösungen für die Iteration über Sammlungen erstellen, insbesondere beim Umgang mit großen oder dynamisch generierten Daten.

Das obige ist der detaillierte Inhalt vonWie ermöglicht das C#-Schlüsselwort „yield' eine effiziente Iteration über Sammlungen?. 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