Supongamos el siguiente código:Pregunta sobre foreach y los delegados
foreach(Item i on ItemCollection)
{
Something s = new Something();
s.EventX += delegate { ProcessItem(i); };
SomethingCollection.Add(s);
}
Por supuesto, esto es un error ya que todos los puntos de delegados al mismo artículo. La alternativa es:
foreach(Item i on ItemCollection)
{
Item tmpItem = i;
Something s = new Something();
s.EventX += delegate { ProcessItem(tmpItem); };
SomethingCollection.Add(s);
}
En este caso, todos los delegados señalan su propio elemento.
¿Qué pasa con este enfoque? Hay alguna otra mejor solución?
¿Podría publicar el código completo que compila y muestra la diferencia? – empi
Puede descompilar primera pieza de código en C# 1.0 y verá cuál es la diferencia –