使用Type t实例化类作为反映

时间:2012-01-29 22:07:01

标签: c# generics reflection

我有以下代码。 t在第二行显示为无效。

Cannot resolve symbol 't'

如何使用Type t实例化泛型类。

Type t = currentProperty.PropertyType;
var x = new MyClass<t>();

谢谢

2 个答案:

答案 0 :(得分:4)

泛型只是一个编译时功能,而不是运行时功能。您需要使用反射创建类。

Type t = currentProperty.PropertyType;
Type desiredType = typeof(MyClass<>).MakeGenericType(t);
var instance = Activator.CreateInstance(desiredType);

答案 1 :(得分:2)

t是在运行时计算的对象类型;你不能在C#编译器期望编译时类型 name 的地方使用它。编译器给出了该错误,因为它无法找到文字名称为“t”的类型。

但是,你可以做你想做的事,尽管不那么简单:

var t = currentProperty.PropertyType;
var genericType = typeof(MyClass<>).MakeGenericType(t);
var x = Activator.CreateInstance(genericType);