Я не могу понять, как пройти через список Action
. Когда я пытаюсь, я получаю значения, аналогичные предыдущей итерации.Цитирование по списку действий
Вот код (упрощенный пример):
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();
Выход:
ghi
ghi
ghi
Почему всегда выбирать последний элемент в strings
, когда он выполняет действие?
И как я могу достичь желаемых результатов, который был бы:
abc
def
ghi
Gah, вы выигрываете. Я знал, как это исправить, но я не мог вспомнить причину. Закрытие! Мне нужно закрыть! +1 :) – Joshua
@ Joshua это было не так давно, когда я узнал немного глубже :) ... это может быть полезно для дальнейшего чтения http://stackoverflow.com/questions/9412672/lambda-expressions-with -multithreading-in-c-sharp –
Интересно, я так и не понял. Благодарю. – demoncodemonkey