wie man Elemente in einer generischen Liste mit foreach ändert?

8

Ich habe die folgende generische Liste, die mit einer Liste von Strings gefüllt ist:

%Vor%

Angenommen, ich möchte am Ende jedes Strings "test" hinzufügen, wie kann ich das auf einfache Weise tun? Intuitiv habe ich das probiert was ok kompiliert:

%Vor%

Aber wenn ich mir dann den Inhalt der Liste anschaue, hat sich nichts geändert. Ich denke, ich könnte eine for-Schleife verwenden, um durch die Liste zu iterieren, aber ich suche nach etwas sehr Einfachem und die Verwendung von ForEach sieht sehr ordentlich aus .... scheint aber nicht zu funktionieren. Irgendwelche Ideen?

    
Anthony 07.06.2009, 11:03
quelle

2 Antworten

14

Das Problem ist, dass das von Ihnen angegebene Action auf den Elementen der Liste ausgeführt wird, aber das Ergebnis wird nirgends zurückgesetzt ... Ihr s ist nur eine lokale Variable.

Das Ändern der Liste an Ort und Stelle wird wahrscheinlich eine tatsächliche foreach annehmen, aber wenn Sie eine neue Liste als Ergebnis nehmen möchten, könnten Sie versuchen:

%Vor%

Nicht ganz gleich ... aber so nah wie möglich ...

    
jerryjvl 07.06.2009, 11:13
quelle
9

Dies ist nicht möglich, es sei denn, der Listentyp ist ein veränderbarer Referenztyp (und in diesem Fall können Sie den tatsächlichen Verweis in der Liste nicht ändern, sondern das Objekt selbst).

Der Grund ist, dass List<T>.ForEach einen Action<T> Delegaten mit Signatur aufruft:

%Vor%

und hier wird das Argument als Wert übergeben (es ist nicht ref ). Wie bei jeder Methode können Sie das Eingabeargument nicht ändern, wenn es nach Wert aufgerufen wird:

Der Code entspricht im Wesentlichen:

%Vor%     
Mehrdad Afshari 07.06.2009 11:07
quelle

Tags und Links