我想创建一个这样的方法:
private static void AddOrAppend<K>(this Dictionary<K, MulticastDelegate> firstList, K key, MulticastDelegate newFunc)
{
if (!firstList.ContainsKey(key))
{
firstList.Add(key, newFunc);
}
else
{
firstList[key] += newFunc; // this line fails
}
}但这会失败,因为它说明您不能添加多播委托。我是不是漏掉了什么?我认为委托关键字只是一个继承自MulticastDelegate的类的简写。
发布于 2010-07-27 03:51:24
firstList[key] = (MulticastDelegate)Delegate.Combine(firstList[key],newFunc);使用测试:
var data = new Dictionary<int, MulticastDelegate>();
Action action1 = () => Console.WriteLine("abc");
Action action2 = () => Console.WriteLine("def");
data.AddOrAppend(1, action1);
data.AddOrAppend(1, action2);
data[1].DynamicInvoke();(这是可行的)
但是,请使用Delegate代替MulticastDelegate;这在很大程度上是一些从未真正工作过的东西的后遗症。或者更好;一种特定类型的委托(可能是Action)。
https://stackoverflow.com/questions/3338430
复制相似问题