ListT.ForEach mit Index

7

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!

    
James Hill 24.10.2012, 17:14
quelle

6 Antworten

15

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:

%Vor%     
Servy 24.10.2012, 17:21
quelle
6

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).

    
lc. 24.10.2012 17:24
quelle
3

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 .

    
devdigital 24.10.2012 17:28
quelle
2

Piggyback auf die Antwort von @lc.

%Vor%     
wageoghe 24.10.2012 18:28
quelle
0

Wenn Sie wirklich eine List.ForEach verwenden möchten, ist es einfach:

%Vor%     
Tiago Raposo 05.08.2016 17:19
quelle
-2

Versuchen Sie es -

%Vor%     
Rohit Vats 24.10.2012 17:26
quelle

Tags und Links