C # делегат словарь добавить - PullRequest
4 голосов
/ 26 июля 2010

Я хочу создать такой метод:

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.

1 Ответ

8 голосов
/ 26 июля 2010
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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...