动态生成泛型

时间:2017-04-24 14:51:59

标签: c# generics amazon-ecs

我有这个:

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中的代码生成工具。

1 个答案:

答案 0 :(得分:0)

我不是说这是一个好主意,但你当然可以动态生成泛型类,甚至是类似这样的集合:

var gt = typeof(List<>).MakeGenericType(typeof(string));
var list = Activator.CreateInstance(gt);

现在listList<string>

但是,这样做的开销可能超过了您对虚拟调度所抱怨的开销。因此,除非您已经分析了您的应用程序,并且确实将虚拟调度确定为应用程序的主要瓶颈,否则我甚至不会担心它。