首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#委派字典添加

C#委派字典添加
EN

Stack Overflow用户
提问于 2010-07-27 03:49:57
回答 1查看 1.3K关注 0票数 4

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

代码语言:javascript
复制
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的类的简写。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-27 03:51:24

代码语言:javascript
复制
firstList[key] = (MulticastDelegate)Delegate.Combine(firstList[key],newFunc);

使用测试:

代码语言:javascript
复制
        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)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3338430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档