Looping através de uma lista de ações

Não consigo entender como percorrer umAction Lista. Quando tento, acabo com os valores iguais à iteração anterio

Aqui está o código (exemplo simplificado):

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();

Resultado

ghi
ghi
ghi

Por que ele está sempre selecionando o elemento final emstrings quando executa a ação?
E como posso obter a saída desejada, que seria:

abc
def
ghi

questionAnswers(6)

yourAnswerToTheQuestion