如何动态地将类型设置为泛型方法?

时间:2015-09-28 19:35:29

标签: c# generics dynamic arguments

假设你有这个通用的method

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

如果我想在另一个泛型方法中调用此方法。外部泛型方法必须接收实际参数值作为参数,以设置内部泛型方法的<T, U>(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?

2 个答案:

答案 0 :(得分:2)

直接致电ChangeType。您将调用包装在一个方法中,该方法需要在编译时指定类型,而不是运行时,然后询问在类型仅在运行时知道时如何调用它。您已经有一个方法(src/androidTest)完全正确。

答案 1 :(得分:0)

您不需要外部方法中泛型类型的方法参数。您应该只能使用类似的类型参数:

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

然后按照任何其他通用方法的方式调用OuterGeneric

你的问题有点不清楚,因为你动态地使用了术语“#34;”#34;当然,通用参数必须在编译时才知道,因此如果您在运行时只知道类型时正在寻找使用泛型方法的方法,那么您实际上并不想使用.NET泛型。 / p>