Zugriff auf den Iterationsindex in C#-Foreach-Schleifen
foreach
Schleifen werden in C# häufig zum Durchlaufen von Sammlungen verwendet. Der direkte Zugriff auf den Iterationsindex innerhalb einer Standardschleife foreach
wird jedoch nicht direkt unterstützt. Dieser Artikel beschreibt effiziente Methoden, um dies zu erreichen.
Nutzung von LINQ für den Indexzugriff
LINQs Select()
-Methode bietet eine saubere Lösung. Wie in einem Beitrag von Ian Mercer auf dem Blog von Phil Haack dargestellt, ermöglicht dieser Ansatz das Abrufen sowohl des Elements als auch seines Index:
<code class="language-csharp">foreach (var item in Model.Select((value, i) => new { i, value })) { var value = item.value; var index = item.i; }</code>
Der Lambda-Ausdruck der Select()
-Methode benötigt zwei Parameter: den Wert und seinen Index (i
). Es wird ein neues anonymes Objekt erstellt, das beides enthält.
Leistungssteigerung mit ValueTuple (C# 7.0 und höher)
Für eine verbesserte Leistung, insbesondere bei größeren Sammlungen, bietet ValueTuple
eine effizientere Alternative:
<code class="language-csharp">foreach (var item in Model.Select((value, i) => (value, i))) { var value = item.value; var index = item.i; }</code>
Dadurch wird das anonyme Objekt durch ein ValueTuple
ersetzt, wodurch der Overhead reduziert wird.
Verbesserte Lesbarkeit durch Destrukturierung (C# 7.0 und höher)
Die Destrukturierung der Zuweisung verbessert die Klarheit des Codes weiter und vereinfacht den Zugriff auf den Index und den Wert:
<code class="language-csharp">foreach (var (value, i) in Model.Select((value, i) => (value, i))) { // Access `value` and `i` directly. }</code>
Dadurch entfällt die Notwendigkeit eines expliziten item.value
- und item.i
-Zugriffs. Diese Methode kombiniert die Leistungsvorteile von ValueTuple
mit verbesserter Codelesbarkeit. Diese Techniken bieten effektive und effiziente Möglichkeiten zur Verwaltung von Iterationsindizes innerhalb der foreach
-Schleifen von C#.
Das obige ist der detaillierte Inhalt vonWie bekomme ich den Iterationsindex in einer C# foreach -Schleife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!