赞同以下法典:
foreach(Item i on ItemCollection)
{
Something s = new Something();
s.EventX += delegate { ProcessItem(i); };
SomethingCollection.Add(s);
}
当然,这是错误的,因为所有代表都提到同一项目。 另一种办法是:
foreach(Item i on ItemCollection)
{
Item tmpItem = i;
Something s = new Something();
s.EventX += delegate { ProcessItem(tmpItem); };
SomethingCollection.Add(s);
}
在这种情况下,所有代表都提到自己的项目。
这种做法是什么? 还有任何其他更好的解决办法?