Supponiamo il seguente codice:Domanda su foreach e delegati
foreach(Item i on ItemCollection)
{
Something s = new Something();
s.EventX += delegate { ProcessItem(i); };
SomethingCollection.Add(s);
}
Naturalmente, questo è sbagliato, perché tutti i delegati punti per lo stesso articolo. L'alternativa è:
foreach(Item i on ItemCollection)
{
Item tmpItem = i;
Something s = new Something();
s.EventX += delegate { ProcessItem(tmpItem); };
SomethingCollection.Add(s);
}
In questo caso tutti i delegati indicano il proprio oggetto.
E questo approccio? C'è qualche altra soluzione migliore?
Potrebbe pubblicare il codice completo che compila e mostra la differenza? – empi
Puoi decompilare il primo pezzo di codice usando C# 1.0 e vedrai quale è la differenza –