如何在泛型方法调用中使用Type变量(C#)

时间:2011-10-13 21:50:25

标签: c# generics

我将一个Type变量t传递给一个方法,我想在调用IQueryable.Join时将其用作通用参数,如下所示

queryResult.Join<Type1, Type2, t, Type3>( items, outerSelector, innerSelector, ( a, b) => a);

显然不起作用。为了实现我的目的,我应该对t做些什么?谢谢!

2 个答案:

答案 0 :(得分:5)

基本上你必须用反射调用方法:

  • 使用Type.GetMethod
  • 获取通用方法模板
  • 调用MakeGenericMethod传递您的4种类型参数
  • 调用传递常规参数的方法

这很痛苦:(

答案 1 :(得分:1)

我不确定“类型变量”的详细信息,但如果变量已经是方法的通用参数,则可以将其用作加入的通用参数:

public void MyMethod<T>()
{
    // do some stuff to get queryResult, then
    queryResult.Join<Type1, Type2, T, Type3>(items, outerSelector, innerSelector, (a, b) => something);
}