我在C#中有一个泛型类,如下所示:
public class GenericClass<T> { ... }
Run Code Online (Sandbox Code Playgroud)
现在,我有Type一个目标对象,并希望,通过反射或其他方式获得Type的对象GenericClass<T>,其中T对应于该类型的对象我有我的目标.
像这样:
Type requiredT = myobject.GetType();
Type wantedType = typeof(GenericClass<requiredT>);
Run Code Online (Sandbox Code Playgroud)
显然这种语法不起作用,但我该怎么办呢?
是的你可以:
Type requiredT = ...
Type genericType = typeof(GenericClass<>);
Type wantedType = genericType.MakeGenericType(requiredT);
Run Code Online (Sandbox Code Playgroud)
这将为您提供GenericClass<T>Type对象,其中T对应于您的requiredT.
然后,您可以使用Activator如下构造实例:
var instance = Activator.CreateInstance(wantedType, new Object[] { ...params });
Run Code Online (Sandbox Code Playgroud)
Type requiredT = myobject.GetType();
Type genericType = typeof(GenericClass<>);
Type wantedType = genericType.MakeGenericType(requiredT);
Run Code Online (Sandbox Code Playgroud)
Type wantedType = typeof(GenericClass<>).MakeGenericType(requiredT);
Run Code Online (Sandbox Code Playgroud)