使用配置文件中的字符串来初始化泛型类型 [重复]

Posted

技术标签:

【中文标题】使用配置文件中的字符串来初始化泛型类型 [重复]【英文标题】:Use a string from a config file to initilize a generic type [duplicate] 【发布时间】:2011-12-18 20:34:47 【问题描述】:

我有一堂课:

public class MyClass<T>

我正在阅读一个配置文件,例如 Guid 类型为 T

除了使用配置文件中的字符串而不是实际类型(而不是硬编码Guid)之外,我该怎么做?

MyClass<Guid> = new MyClass<Guid>();

【问题讨论】:

instead of hard-coding Guid 是什么意思? 这毫无意义。你为什么要这样做?如果类型参数是动态的,那么使用有助于参数化 static 类型的泛型就没有意义了。 当您必须直接与生成的类型交互时,您处于一种奇怪的情况。 (我假设生成了名称为 GUID 的类型。) 【参考方案1】:

您需要完全限定的类型名称:

var typeArgument = Type.GetType("System.Guid");

然后可以使用反射来获取参数化类型:

var genericType = typeof(MyClass<>).MakeGenericType(typeArgument);

然后您可以通过以下方式实例化:

var instance = Activator.CreateInstance(genericType);

但我不确定您为什么要这样做或为什么它在您的场景中有用。由于使用这种技术,您将永远无法与 MyClass&lt;T&gt; 进行交互,其中 T 被定义为您在编译时指定的东西,您首先失去了使用泛型的大部分优势。

【讨论】:

以上是关于使用配置文件中的字符串来初始化泛型类型 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

C#中的泛型,使用变量的类型作为参数[重复]

c#中泛型类型的默认值[重复]

JAVA泛型

模板与泛型编程——模板实参推断

泛型类型的实例[重复]

C#类中的多个泛型类型字段[重复]