传递通用类型

时间:2010-11-17 07:45:30

标签: c# generics reflection

我有一个方法

 public Queryable Query<T>()
 {
 }

现在我可以通过动态创建泛型参数T来调用该方法。

像这样的事情

 public Queryable Query<T>()
 {

    Query<OtherT>();
 }

otherT可以是T中的一种属性。

谢谢,

3 个答案:

答案 0 :(得分:4)

您可以使用反射动态调用泛型方法,首先获取泛型方法定义(使用Type.GetMethod),然后调用MakeGenericMethod并提供类型参数,然后调用Invoke。但是,为了给你一个例子,你还没有给我们足够的信息。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

尝试以下方法:

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

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

这会自动关闭Query<T>的{​​{1}}方法。您可以在此处提供所需的类型。