我试图在内存中保存一个类型的引用集合,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));
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道更好的处理方法?提前致谢.
Luc*_*ski 10
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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,假设你要调用一个,你可以简单地执行一个演员:
public void Invoke<T>(T message) where T :IMessage
{
Delegate callback;
if (_callbacks.TryGetValue(typeof(T), out callback))
((Action<T>)callback).Invoke(message);
}
Run Code Online (Sandbox Code Playgroud)