Suppose the following code:
foreach(Item i on ItemCollection)
{
Something s = new Something();
s.EventX += delegate { ProcessItem(i); };
SomethingCollection.Add(s);
}
Of course, this is wrong because all the delegates points to the same Item. The alternative is:
foreach(Item i on ItemCollection)
{
Item tmpItem = i;
Something s = new Something();
s.EventX += delegate { ProcessItem(tmpItem); };
SomethingCollection.Add(s);
}
In this case all the delegates point to their own Item.
What about this approach? There is any other better solution?