我有以下课程。
public class myType
{
public event Action myAction;
}
还有一个包含该类的一些实例的字典。
var myDictionary = new Dictionary<myType, string>();
在我的 Main 我有一个带有签名的方法 void SomeMethod(myType, Dictionary)
通过以下循环,我添加了对象的行为:
foreach(var pair in myDictionary)
pair.Key.myAction += () => SomeMethod(pair.Key, myDictionary);
运行此循环后,当调用我的一个对象的操作时,效果就好像循环已使用字典中的最后一个 pair.Key 来处理所有 lambda 表达式。
另一方面,循环中有一个小的变化:
foreach(var pair in myDictionary)
{
myType temp = pair.Key;
pair.Key.myAction += () => SomeMethod(temp, myDictionary);
}
运行此循环后,所有对象操作都按预期工作。
我有点不知所措,为什么这样的改变会产生这样的效果。键值对可能是一个结构,键本身是一个引用类型(我的类的一个实例)。任何想法为什么会这样?
在此先感谢您的任何建议。