假設下面的代碼:關於產品的foreach和代表
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);
}
在這種情況下,所有代表都指向自己的Item。
這種方法呢?還有其他更好的解決方案嗎?
你可以發佈編譯和顯示差異的完整代碼嗎? – empi 2009-10-21 12:55:31
你可以使用C#1.0反編譯第一段代碼,你會看到有什麼區別 – 2009-10-21 12:58:09