存储Action< T>在单个集合中以供以后使用

本文关键字:集合 单个 Action 存储 | 更新日期: 2023-09-27 18:10:26

我试图在内存中保存类型为Action<T>的引用集合,其中T是变量类型

我已经找到了dynamic的解决方案,但我不喜欢使用动态解决方案

public class MessageSubscriptor:IMessageSubscriptorPool
{
    Dictionary<Type, Action<dynamic>> Callbacks = new Dictionary<Type, Action<dynamic>>();
    public void Subscribe<T>(Action<T> callback) where T :IMessage
    {
        Callbacks.Add(typeof(T), (obj) => callback(obj));
    }
}

有人知道更好的方法来处理这个吗?

存储Action< T>在单个集合中以供以后使用

Action<T>Delegate,因此…

public class MessageSubscriptor:IMessageSubscriptorPool
{
    private readonly Dictionary<Type, Delegate> _callbacks = new Dictionary<Type, Delegate>();
    public void Subscribe<T>(Action<T> callback) where T :IMessage
    {
        _callbacks.Add(typeof(T), callback);
    }
}

然后,假设您想调用一个,您可以简单地执行强制转换:

public void Invoke<T>(T message) where T :IMessage
{
    Delegate callback;
    if (_callbacks.TryGetValue(typeof(T), out callback))
        ((Action<T>)callback).Invoke(message);
}