我有一个方法传递泛型类型
public Queryable Query<T>()
{
}
现在我可以用动态创建通用参数T.
saomething这样
public Queryable Query<T>()
{
Query<OtherT>();
}
otherT可能是一个类型的调用方法属于T.
谢谢,
我有一个方法传递泛型类型
public Queryable Query<T>()
{
}
现在我可以用动态创建通用参数T.
saomething这样
public Queryable Query<T>()
{
Query<OtherT>();
}
otherT可能是一个类型的调用方法属于T.
谢谢,
尝试以下操作:
public Queryable Query<T>()
{
MethodInfo method = GetType().GetMethod("Query");
return (Queryable)method.MakeGenericMethod(typeof(OtherT)).Invoke(this, null);
}
这将自动关闭的typeof(OtherT)
的Query<T>
方法。你可以在这里提供你需要的类型。
感谢pieter,它的工作原理。 – Novice 2010-11-17 09:01:27
不客气。 – 2010-11-17 09:02:48
你不行。通用参数类型需要在编译时知道。这就是为什么我们说当我们使用泛型时它是一个强类型代码,因为这些类型是事先已知的。只有在运行时才知道类型,您不能将其用作通用参数。
您可以首先获取泛型方法定义(使用Type.GetMethod
),然后调用MakeGenericMethod
并提供类型参数,然后调用Invoke
,从而动态使用反射来调用泛型方法。但是,您还没有给我们足够的信息继续下去,以举例说明。
谢谢jon,我试着使用MakeGeneric方法,并通过Invoke方法调用,它工作完美,非常感谢你 – Novice 2010-11-17 09:02:49
目前还不清楚你的问题是什么或者你想做什么,所以你不得不多加努力。 – TimothyP 2010-11-17 07:47:35