[英]C# type or namespace expected confusion
我被C#错误弄糊涂了。
Type t = thing.GetType()
t
现在是一种类型。 但是,如果我尝试这样做:
new GenericThing<t>
我收到警告,提示预期为类型或名称空间。 我想念什么?
t
是在运行时创建的Type对象。 泛型期望一个类型名称,该名称在编译时解析。 要在运行时创建泛型,必须使用MakeGenericType
例如:
Activator.CreateInstance(typeof(GenericThing<>).MakeGenericType(t));
t
是类型Type
的对象实例,即仅在运行时才存在的对象。 泛型在编译时工作,并期望该类型的名称。
我认为您同意以下说法没有道理:
Type t = thing.GetType()
TypeOfThing instance = new t();
并且出于同样的原因,您不能将类型实例作为泛型的参数传递。
Type
是代表一个类型,而不是实际上是一个,所以你不能使用实例的类Type
在期望一个类型或类型参数的地方。
您应该这样做:
var youGeneric = typeof(GenericThing<>).MakeGenericType(t)
.GetConstructor(Type.EmptyTypes)
.Invoke(null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.