Non riesco a capire come eseguire il ciclo di un elenco Action
. Quando provo, finisco con i valori che sono gli stessi della precedente iterazione.In loop attraverso un elenco di azioni
Ecco il codice (esempio semplificato):
string[] strings = { "abc", "def", "ghi" };
var actions = new List<Action>();
foreach (string str in strings)
actions.Add(new Action(() => { Trace.WriteLine(str); }));
foreach (var action in actions)
action();
uscita:
ghi
ghi
ghi
Perché è sempre selezionando l'elemento finale in strings
quando si esegue l'azione?
E come posso raggiungere il risultato desiderato, che sarebbe:
abc
def
ghi
Gah, hai vinto. Sapevo come risolverlo, ma non riuscivo a ricordare il motivo per cui. Chiusura! Ho bisogno di chiusura! +1 :) – Joshua
@Joshua non è stato molto tempo fa quando ho imparato un po 'più a fondo :) ... questo potrebbe essere utile per ulteriori letture http://stackoverflow.com/questions/9412672/lambda-expressions-with -multithreading-in-c-sharp –
Interessante, non l'ho mai capito. Grazie. – demoncodemonkey