C#委托字典添加

时间:2010-07-26 19:49:57

标签: c# delegates

我想创建一个这样的方法:

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
    }
}

但是这失败了因为它说你无法添加多播委托。有什么我想念的吗?我认为delegate关键字只是从MulticastDelegate继承的类的简写。

1 个答案:

答案 0 :(得分:8)

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)。