2010-11-17 124 views
2

我有一个方法传递泛型类型

public Queryable Query<T>() 
{ 
} 

现在我可以用动态创建通用参数T.

saomething这样

public Queryable Query<T>() 
{ 

    Query<OtherT>(); 
} 

otherT可能是一个类型的调用方法属于T.

谢谢,

+4

目前还不清楚你的问题是什么或者你想做什么,所以你不得不多加努力。 – TimothyP 2010-11-17 07:47:35

回答

2

尝试以下操作:

public Queryable Query<T>() 
{ 
    MethodInfo method = GetType().GetMethod("Query"); 

    return (Queryable)method.MakeGenericMethod(typeof(OtherT)).Invoke(this, null); 
} 

这将自动关闭的typeof(OtherT)Query<T>方法。你可以在这里提供你需要的类型。

+0

感谢pieter,它的工作原理。 – Novice 2010-11-17 09:01:27

+0

不客气。 – 2010-11-17 09:02:48

2

你不行。通用参数类型需要在编译时知道。这就是为什么我们说当我们使用泛型时它是一个强类型代码,因为这些类型是事先已知的。只有在运行时才知道类型,您不能将其用作通用参数。

4

您可以首先获取泛型方法定义(使用Type.GetMethod),然后调用MakeGenericMethod并提供类型参数,然后调用Invoke,从而动态使用反射来调用泛型方法。但是,您还没有给我们足够的信息继续下去,以举例说明。

+0

谢谢jon,我试着使用MakeGeneric方法,并通过Invoke方法调用,它工作完美,非常感谢你 – Novice 2010-11-17 09:02:49