【问题标题】:How to use a Type variable in a generic method call (C#)如何在泛型方法调用中使用类型变量(C#)
【发布时间】:2011-10-13 21:50:25
【问题描述】:

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

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

这显然行不通。我应该对t 做什么才能达到我的目的?谢谢!

【问题讨论】:

    标签: c# generics


    【解决方案1】:

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

    • Type.GetMethod获取泛型方法模板
    • 调用MakeGenericMethod 传入你的4个类型参数
    • 调用传入常规参数的方法

    这很痛苦:(

    【讨论】:

      【解决方案2】:

      我不确定您的“类型变量”的详细信息,但如果该变量已经是方法的泛型参数,您也可以将其用作 Join 的泛型参数:

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

      【讨论】:

      • 我看到我在这里被欺骗了,但我还要指出,在我的示例中,T 必须在编译时确定。继续。
      • 谢谢,安德鲁。在这种情况下,T 无法在编译时确定.. :(
      • 你确定吗?好吧,好吧,是的,你确定,但有时有一种方法可以重构,以便 T 在编译时可确定。你想完成什么?
      • 当然,这样总是更好.. 问题是我一整天都在尝试重构这个怪物,没有任何运气,所以我想我需要退后..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多