【问题标题】:Dictionary that holds Blocking Collections of different Type without casting包含不同类型的阻塞集合而不进行强制转换的字典
【发布时间】:2012-05-10 17:49:51
【问题描述】:

我可以通过绕过任何强制转换的接口设置MyDict<Type, BlockingCollection<"differentTypes"> 的字典,从而防止使用对象或动态类型吗?

我想使用这样的原因是因为我想在运行时初始化不同类型的阻塞集合,因为传入的对象是不同的类型,然后我想将这些传入的对象添加到类型匹配的阻塞集合中。我还想稍后访问 BlockingCollection 中的对象而不必强制转换。 Blocking 集合的必要类型在包装类的实例化时是已知的。传入对象的类型仅在运行时已知。传入的对象类型永远不会与类实例化时已知的类型不同。我想从匹配的 BlockingCollection 中检索的对象的类型也只在运行时才知道。有什么方法可以设置它而无需强制转换?

我浏览了许多相关问题,但没有找到与此处描述的完全相同的规格。

【问题讨论】:

  • 为什么要避免动态?
  • 如果我错了请纠正我,但它不会因为可能的拳击而增加开销吗?它本质上不是对象类型吗?最重要的是延迟和吞吐量,我尽量避免任何类型的投射和装箱。
  • @Freddy 这里的实际数据是什么?价值观是什么?
  • @Marc,值是类对象
  • @Freddy 那你为什么要讨论拳击?

标签: c# collections types interface blockingcollection


【解决方案1】:

最终,“不同类型”表示object,或通用基类/接口。如果这些类型是值类型,则必须将它们装箱和拆箱(尽管您指出这些是类对象,所以这不适用 - 只有 structs 曾经装箱/拆箱)。所以剩下一些演员表 - 演员表非常快:我不会太担心它的影响。

当然,如果“不同类型”(一些通用接口等)之间存在一些共性,那么您可能无需强制转换就可以使用该通用接口。

【讨论】:

  • 好吧,所以即使使用接口,我基本上也不会绕过转换?
  • @Freddy 如果使用接口正确,则不需要强制转换
  • @Marc,我该怎么做呢?假设我将 List 传递给包含不同类型的 BlockingCollections 的字典的封闭类的构造函数,那么 Dictionary 的类型是否会是 Dict?
  • @Freddy 你误会我了;它需要类似于Dict<Type, BlockingCollection<ISomeInterface>>
  • @Freddy 有问题吗?作为 stackoverflow 本身的旁注,在编写涉及泛型的任何内容时,您需要确保使用反引号 (`) - 否则像 < 这样的东西往往会消失。所以:如果我写 `foo`,它会显示为 foo<t>
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 2021-09-19
  • 2015-08-17
  • 2021-05-11
  • 2011-11-21
  • 1970-01-01
  • 2019-03-25
  • 2016-10-21
相关资源
最近更新 更多