gpt4 book ai didi

c# - 将 Action 存储在单个集合中供以后使用

转载 作者:可可西里 更新时间:2023-11-01 09:08:01 26 4
gpt4 key购买 nike

我试图在内存中保存 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);
}

关于c# - 将 Action<T> 存储在单个集合中供以后使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32306929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com