【问题标题】:How to set a type dynamically into a generic method?如何将类型动态设置为泛型方法?
【发布时间】:2015-09-28 19:35:29
【问题描述】:

假设你有这个通用的method

    public static T ConvertValue<T, U>(U value) where U : IConvertible
    {
        return (T)Convert.ChangeType(value, typeof(T));
    }

如果我想在另一个泛型方法中调用此方法。外部泛型方法必须接收实际参数值作为参数,以设置内部泛型方法的&lt;T, U&gt;(U value)

如何正确实现这一点,以便我可以调用OuterGeneric 并为其提供适当的参数?

这只是我需要如何使用它的演示。

public void OuterGeneric<TypeT, TypeU>(TypeT tType, TypeU uType, TypeU valueOfTypeU)
{
   // Call of Generic method
   TypeT recieverOf_T  = ConvertValue<tType, uType>(valueOfTypeU);
}

// Some way to call OuterGeneric. How?

【问题讨论】:

  • 你想用这些tTypeuType做什么?为什么不将TypeTTypeU 作为通用参数传递?我没有得到你的“示范”,这似乎使显而易见的事情过于复杂。
  • @WiktorZychla 如果他在编译时不知道类型是什么,他将不得不这样做。

标签: c# generics dynamic arguments


【解决方案1】:

直接拨打ChangeType即可。您将调用包装在一个方法中,该方法需要在编译时而不是运行时指定类型,然后询问仅在运行时才知道类型时如何调用它。您已经有一个方法 (ChangeType) 可以做到这一点。

【讨论】:

    【解决方案2】:

    外部方法中的泛型类型不需要方法参数。您应该能够像这样使用类型参数:

    public void OuterGeneric<TypeT, TypeU>(TypeU valueOfTypeU)
    {
       // Call of Generic method
       TypeT recieverOf_T  = ConvertValue<TypeT, TypeU>(valueOfTypeU);
    }
    

    然后像调用任何其他通用方法一样调用OuterGeneric

    您的问题有点不清楚,因为您使用了“动态”一词。当然泛型参数必须在编译时知道,所以如果你在寻找一种在运行时只知道类型的情况下使用泛型方法的方法,那么你实际上并不想使用 .NET 泛型。

    【讨论】:

      猜你喜欢
      • 2016-04-22
      • 2014-05-17
      • 1970-01-01
      • 2011-02-28
      • 2010-10-26
      • 1970-01-01
      • 2011-03-21
      • 2017-12-23
      • 1970-01-01
      相关资源
      最近更新 更多