我有这个:
Dictionary<Type, List<AbstractThing>> Things { get; set; } =
new Dictionary<Type, List<AbstractThing>();
我有大量具体的AbstractThing类。因此,上面的Dictionary依赖于虚拟调度来实现功能,这会增加不必要的开销。
我想改为:
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中的代码生成工具。
答案 0 :(得分:0)
我不是说这是一个好主意,但你当然可以动态生成泛型类,甚至是类似这样的集合:
var gt = typeof(List<>).MakeGenericType(typeof(string));
var list = Activator.CreateInstance(gt);
现在list
是List<string>
但是,这样做的开销可能超过了您对虚拟调度所抱怨的开销。因此,除非您已经分析了您的应用程序,并且确实将虚拟调度确定为应用程序的主要瓶颈,否则我甚至不会担心它。