Heim >Backend-Entwicklung >C++ >Was macht eine C#-Klasse mithilfe einer Foreach-Schleife iterierbar?
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!