【发布时间】:2018-04-13 00:39:08
【问题描述】:
我正在尝试使用 MessagePack 获得一个简单的消息传递服务。
服务应保留dictionary<type, Action<T>>,以便查找如何“处理”特定消息。
基本上,我有:
private Dictionary<Type, Action<IMessage>> subActions;
public void Subscribe<TMessage>(Action<TMessage> action) where TMessage : IMessage
{
subActions.Add(typeof(TMessage), action);
}
我明白了:
Argument 2: cannot convert from 'System.Action<TMessage>' to 'System.Action<GameServer.Messages.IMessage>'
如果不清楚;消息“到达”为包含“类型代码”的byte[]。从“类型代码”中,我得到了Type,应该然后能够查找到合适的Action 来获取。 Action 显然应该将TMessage 作为参数。
我似乎无法就编译器为何给我这个错误得出一个合乎逻辑的结论,尽管我怀疑这与 Dictionary 与 TMessage 不在同一上下文中有关。
提前致谢!
【问题讨论】:
-
我不确定你到底想在这里完成什么,但将
TMessage限制为IMessage感觉不对。 -
@P.Brian.Mackey TBH 我宁愿不使用 IMessage。除了使用
private Dictionary<Type, Action<Object>> subActions;,我想不出任何其他方法,我宁愿避免将Object转换为Tmessage
标签: c# generics delegates action