存储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>
是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);
}