我需要使用如下方法:
DoSomething<(T)>();
但我不知道我有哪种类型,只有类型的对象。如果我只有:
,我如何调用此方法Type typeOfGeneric;
答案 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);