Проблема с другим «контекстом выполнения» анонимного метода внутри цикла

У меня проблема с анонимным методом внутри цикла.

Следующий код предназначен только для иллюстрации моей проблемы:

private void Form1_Load(object sender, EventArgs e)
{
    List<string> bassists = new List<string>(){
        "Jaco Pastorius", 
        "Marcus Miller", 
        "Flea", 
        "Vicor Wooten"
    };

    foreach (string item in bassists)
    {
        this.button1.Click += (s, ea) => Output(s, ea, item); 
    }
}

private void Output(object s, EventArgs e, string item)
{
    this.listBox1.Items.Add(item);
}

И когда я нажимаю кнопку, выводится следующее:

Victor Wooten
Виктор Вутен
Виктор Вутен
Виктор Вутен

вместо:

Хако Пасториус
Маркус Миллер
Блоха
Викор Вутен

Суть моей проблемы - это различный контекст выполнения. Я знаю, что мой пример глуп.

8
задан Cody Gray 10 December 2010 в 14:01
поделиться