如何获得类型

时间:2010-03-26 15:47:21

标签: c# generics

我需要使用如下方法:

DoSomething<(T)>();

但我不知道我有哪种类型,只有类型的对象。如果我只有:

,我如何调用此方法
Type typeOfGeneric;

2 个答案:

答案 0 :(得分:3)

您使用反射(假设DoSomething()是静态的):

var methodInfo = typeOfGeneric.GetMethod( "DoSomething" );
methodInfo.Invoke( null, null );
编辑:在我写答案时你的问题发生了变化。上面的代码用于非泛型方法,这里是一个泛型类:

var constructedType = someType.MakeGenericMethod( typeOfGeneric );
var methodInfo = constructedType.GetMethod( "DoSomething" );
methodInfo.Invoke( null, null );

这里是非泛型类的静态泛型方法:

var typeOfClass = typeof(ClassWithGenericStaticMethod);

MethodInfo methodInfo = typeOfClass.GetMethod("DoSomething",   
    System.Reflection.BindingFlags.Static | BindingFlags.Public);

MethodInfo genericMethodInfo = 
    methodInfo.MakeGenericMethod(new Type[] { typeOfGeneric });

genericMethodInfo.Invoke(null, new object[] { "hello" });

答案 1 :(得分:1)

如果您只将Type指定为Type,则必须构建泛型方法,并通过反射调用它。

Type thisType = this.GetType(); // Get your current class type
MethodInfo doSomethingInfo = thisType.GetMethod("DoSomething");

MethodInfo concreteDoSomething = doSomethingInfo.MakeGenericMethod(typeOfGeneric);
concreteDoSomething.Invoke(this, null);