我有以下类。从KeyValuePair获取重要参考
public class myType
{
public event Action myAction;
}
以及包含该类的一些实例的字典。
var myDictionary = new Dictionary<myType, string>();
在我主我有签名 无效的someMethod的方法(的myType,字典)
用下面的循环添加我的对象的行为:
foreach(var pair in myDictionary)
pair.Key.myAction +=() => SomeMethod(pair.Key, myDictionary);
运行该循环之后,当我的一个对象的动作被调用时,效果就好像循环已经使用了字典中所有lambda表达式的最后一个pair.Key。
在另一方面与环中的小变化:
foreach(var pair in myDictionary)
{
myType temp = pair.Key;
pair.Key.myAction +=() => SomeMethod(temp, myDictionary);
}
运行该循环后,所有对象的动作正常工作。
我有点茫然,为什么这样的改变会产生这样的效果。 keyvaluepair可能是一个结构体,通过键本身就是一个引用类型(我的类的一个实例)。任何想法为什么这样表现?
在此先感谢您的任何建议。
感谢您在清除了。 – 2013-03-04 10:01:13