【问题标题】:How to store generic Actions with different parameters in a Dictionary?如何在字典中存储具有不同参数的通用动作?
【发布时间】:2016-03-20 10:04:49
【问题描述】:

我想在Dictionary 中存储带有一个通用参数的委托(Action),并且我想避免任何代码异味 如果可能的话,关于向下/向上转换。

基本上,我正在实现某种请求/响应回调管理器,其中用户从 REST API 并为我提供带有正确响应对象的回调。简而言之,用户调用的方法如下所示:

void GetUser(int id, Action<GetUserResponse> callback);

然后,我发出请求并将回调保存到我的“回调管理器”中。当来自服务器的响应 进来(主要是 json)我把它解析成一个 GetUserResponse 对象并触发回调。不过有很多不同的 具有不同响应对象的请求和回调管理器必须优先考虑它们(以及其他一些东西) 我不想为存储该请求的回调的每个请求都有一个字典,而是 有一个字典来存储所有的回调(和一个唯一的 id)。

基本上是这样的:(显然不能这样工作)

Dictionary<GUID,Action<T>> AllCallbacks;

这是否可能而无需在“用户端”投射任何东西?

【问题讨论】:

  • 响应对象有什么共同点吗?你能创建一个对所有人都通用的界面吗?
  • 很遗憾没有。或多或少只持有因请求而异的数据
  • 你能举一个你需要存储的两个不同请求Action对象的例子吗?

标签: c# .net generics dictionary


【解决方案1】:

看看Dictionary of Action<T> Delegates。 应该为您提供一些可用选项的指导。我认为没有开箱即用的简单而优雅的解决方案。 您可以使用Dictionary&lt;GUID,Action&lt;dynamic&gt;&gt; AllCallbacks;,但您需要输入检查并相应地进行转换。

【讨论】:

  • 感谢您提供的链接,唯一的区别是我可以为一种类型拥有多个代表。那会让我的解决方案更复杂一些
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多