Ich versuche, das LINQ-Äquivalent des folgenden Codes zu finden:
%Vor%Ich hatte gehofft, ich könnte etwas wie:
verwenden %Vor%Aber ich habe keine Möglichkeit gefunden festzustellen, auf welcher Iteration die Schleife läuft. Jede Hilfe wäre willkommen!
LINQ hat aus gutem Grund keine ForEach
-Methode. LINQ dient zum Ausführen von Abfragen . Es wurde entwickelt, um Informationen aus einigen Datenquellen zu erhalten. Es ist nicht entworfen, um Datenquellen zu mutieren. LINQ-Abfragen sollten keine Nebenwirkungen verursachen, was genau Sie hier tun.
Die Klasse List
hat eine Methode ForEach
, die Sie verwenden. Da es nicht wirklich im Namensraum System.Linq
ist, ist es technisch gesehen kein Teil von LINQ.
Es ist nichts falsch mit der for
-Schleife in Ihrer Frage. Es wäre falsch (aus einer guten Praxisperspektive), zu versuchen, es so zu verändern, wie Sie es versuchen.
Hier ist ein Link, der das Thema diskutiert Materie genauer.
Wenn Sie nun diesen Hinweis ignorieren und trotzdem eine ForEach
-Methode verwenden möchten, ist es nicht schwer, einen zu schreiben, der der Aktion einen Index zur Verfügung stellt:
Es ist ein wenig verworren und schafft eine Zwischenkollektion, aber wie wäre es:
%Vor% Dies verwendet die Überladung von Enumerable.Select
, die den Index enthält .
Ich muss argumentieren, dass es nichts bringt, wenn man es so macht. Sie erstellen mehr Overhead mit der Zwischensammlung und IMHO verlieren Lesbarkeit über Ihre ursprüngliche for-Schleife.
Sie können die Zwischenkollektion auch überspringen, wenn Sie foreach
loop anstelle von List.ForEach
verwenden möchten. Siehe @ lowoghes Antwort (erneut sehr empfehlenswert).
Gibt es einen Grund, warum Sie nicht Dictionary<string, string>
verwenden, da Ihre Namen / Schlüssel eindeutig zu sein scheinen? Dies wäre schneller und Sie könnten den Abfrageoperator ToDictionary
verwenden.
Wenn Sie auch eine Erweiterungsmethode verwenden möchten (obwohl Servy sagt, dass hier eine for-Schleife die richtige Lösung ist), könnten Sie Ihre eigene schreiben - siehe hier .
Wenn Sie wirklich eine List.ForEach verwenden möchten, ist es einfach:
%Vor%