从System.Type初始化通用对象

21
我需要创建一个通用类型,但在编译时不知道该类型。我希望能够做到这一点:
Type t = typeof(whatever);
var list = new List<t>

这段代码无法编译,因为t不是一个有效的类型。但它确实知道一个有效的类型。是否有一种方法可以从System.Type动态创建泛型列表呢?我可能需要反射,那也没问题,只是有点迷惑。

1个回答

28

就像这样:

Type t;
Type genericListType = typeof(List<>).MakeGenericType(t);
object list = Activator.CreateInstance(genericListType);

注意:只能将它分配给类型为的变量。(虽然可以转换为非泛型的接口)。
要使用变量,您可能需要反射。

这个很好用,但是之后使用起来有点麻烦。不过它能完成任务。 - captncraig
没错;使用起来很麻烦。可能有更好的选择;你可以在这里提出另一个问题,并告诉我们你想要做什么。 - SLaks
事实证明,在我的应用程序中,我可以将其轻松转换为非泛型接口,并且它运行得非常好。 - captncraig

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接