Прокручивание списка действий

Я не могу понять, как перебирать список 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

Почему он всегда выбирает последний элемент в строках при выполнении действия?
И как я могу добиться желаемого результата, который будет:

abc
def
ghi
8
задан demoncodemonkey 5 March 2012 в 15:33
поделиться