【发布时间】:2017-04-24 23:05:44
【问题描述】:
我有这个:
Dictionary<Type, List<AbstractThing>> Things { get; set; } =
new Dictionary<Type, List<AbstractThing>();
我有大量具体的 AbstractThing 类。照原样,上述字典依赖于虚拟调度来运行,这增加了不必要的开销。
我想要这个:
Dictionary <Type, List<T>> Things, { get; set; } = new Dictionary<Type, List<T>>();
对于列表,我希望每个值都有不同的泛型。它避免了虚拟调度的开销。不过不确定如何解释。
Key-value pair #1 would be: typeof(ConcreteThing1), List<ConcreteThing1>()
Key-value pair #2 would be: typeof(ConcreteThing2), List<ConcreteThing2)()
Key-value pair #3 would be: typeof(ConcreteThing3), List<ConcreteThing3)()
And so on.
这可能吗?执行此操作的最简单的一次写入运行(便携)方式是什么?例如,将解决方案嵌入程序本身(可移植)的方式将优于 Visual Studio 2017 等 IDE 中的代码生成工具。
【问题讨论】:
-
那行不通。它怎么知道
ConcreteThing1是ConcreteThing2?古老的格言通常很合适 - 如果您在编译时不知道您的类型,那么您(可能)使用泛型是错误的。 -
另外 - 我看不出你问题顶部的代码是如何工作的。 rextester.com/JIQZX50776
-
按原样,上面的字典依赖于虚拟调度来运行,这增加了不必要的开销。 你是否分析过你的应用程序并确定虚拟调度是你的主要瓶颈应用?如果没有,甚至不要浪费你的时间。您正在尝试制作一些非常简单、非常复杂的东西,最多只能在一段可能没有运行的代码中减少几毫秒,因为您的代码的其他部分正在减慢它的速度。
标签: c# generics amazon-ecs