Salut
------

Quelqu'un peut-il me dire pourquoi si j'écris:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
  for (int i = 0; i < 3; i++)
{
    myTimers[i] = new Timer(100);
    myTimers[i].Elapsed += delegate { TimerSweepElapsed(i); };
}
Alors toutes mes entrées dans TimerSweepElapsed pour mes 3 timers arrivent avec la valeur "3", soit la valeur de sortie de i de la boucle?

Alors que si j'écris de façon qui semble idiote ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
  for (int i = 0; i < 3; i++)
{
    myTimers[i] = new Timer(100);
    var param = i;
    myTimers[i].Elapsed += delegate { TimerSweepElapsed(param); };
}
Je reçois bien une valeur comprise entre 0 et 2.

J'ai déjà constaté que je devais procéder comme ça, mais j'aimerais connaître la bonne raison, ou savoir s'il n'y a pas une méthode plus élégante.
Merci d'avance,
Claude