1

これが私のコードです:

var messageHandlers = new Dictionary<Type, Action<T>>();

public static void Subscribe(Action<T> message)
{
    if (messageHandlers.ContainsKey(typeof(T)))
    {
        messageHandlers[typeof(T)] += message;
    }
    else
    {
        messageHandlers.Add(typeof(T), message);
    }
}

これをワンライナーにする方法はありますか?

4

1 に答える 1

4

ワンライナーにすることはできませんが、高速にすることはできます。

Action<T> current;
messageHandlers.TryGetValue(typeof(T), out current);
messageHandlers[typeof(T)] = current + message;

Dictionary<>インデクサーは、存在しないキーを追加します。

a に切り替えるとConcurrentDictionary<>、ワンライナーにすることができます。

dict.AddOrUpdate(typeof(T), message, (key, current) => current + message);
于 2012-11-25T23:52:41.183 に答える