Heim >Backend-Entwicklung >C++ >Was macht eine C#-Klasse mithilfe einer Foreach-Schleife iterierbar?

Was macht eine C#-Klasse mithilfe einer Foreach-Schleife iterierbar?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-10 08:39:43858Durchsuche

What Makes a C# Class Iterable Using a Foreach Loop?

Detailliertes Verständnis der foreach-Schleife in C#

Die foreach-Schleife in C# ist ein leistungsstarkes Sprachkonstrukt, das es Entwicklern ermöglicht, einfach und effizient über die Elemente einer Sammlung zu iterieren. Doch was genau muss eine Klasse erfüllen, um die foreach-Schleife nutzen zu können?

Iterierbare Klasse

Jede Klasse, die die IEnumerable-Schnittstelle implementiert, kann mithilfe einer foreach-Schleife iteriert werden. Technisch gesehen muss die Klasse nur eine MoveNext()-Methode bereitstellen, die ein Objekt mit einer Current-Methode und einer GetEnumerator()-Eigenschaft zurückgibt, aber die Implementierung von IEnumerable ist die gebräuchlichste Methode, um diese Funktionalität bereitzustellen.

Gemeinsame Sammlungstypen

Standardsammlungstypen wie Collection<T>, List<T> und Arrays (T[]) implementieren alle die ICollection- oder IEnumerable-Schnittstelle und ermöglichen so ihre Verwendung in foreach-Schleifen. Dies liegt daran, dass diese Typen Sammlungen von Daten darstellen, die aufgezählt werden können.

So funktioniert die foreach-Schleife

Eine foreach (int i in obj)-Schleife ähnlich zu foreach lässt sich grob in den folgenden Code übersetzen:

<code class="language-csharp">var tmp = obj.GetEnumerator();
int i; // C# 4.0 之前
while (tmp.MoveNext())
{
    int i; // C# 5.0 及以后
    i = tmp.Current;
    // 你的代码
}</code>

tmp Die Variable speichert den Enumerator, der für das Durchlaufen der Sammlung verantwortlich ist. Bei jeder Iteration rückt die MoveNext()-Methode den Enumerator zum nächsten Element vor, während das Current-Attribut das aktuelle Element zurückgibt (das der Schleifenvariablen zugewiesen ist, wie z. B. i in unserem Beispiel).

Variationen und Veröffentlichungen

Abhängig von der Implementierung unterstützen Enumeratoren möglicherweise die IDisposable-Schnittstelle. Wenn dies der Fall ist, gibt C# den Enumerator automatisch mithilfe des using-Musters frei, wenn die Schleife beendet wird. Es ist wichtig zu beachten, dass in C# 5.0 die Deklaration der Schleifenvariablen (int i) in die Schleife verschoben wurde, was entscheidend ist, wenn Sie die Variable in einer anonymen Methode oder einem Lambda-Ausdruck verwenden möchten.

Das obige ist der detaillierte Inhalt vonWas macht eine C#-Klasse mithilfe einer Foreach-Schleife iterierbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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