无法指定通用函数返回值来创建泛型方法

时间:2012-12-15 10:07:43

标签: c# c#-4.0

我有这个方法,它需要将int值列表转换为适当的枚举值列表。

问题是Select返回了一个对象类型,因为我还没有为泛型函数指定返回类型,因为返回类型也是通用的。

    public static Tout Convert<Tout, Tin>(IList<Tin> reply)
    {
        Type resultListElementType = typeof(Tout).GetGenericArguments()[0];
        MethodInfo setEnumValueMethod = typeof(EnumUtils).GetGenericMethod("SetEnumValue", new Type[] { typeof(Tin) });
        MethodInfo setEnumValueGenericMethod = setEnumValueMethod.MakeGenericMethod(resultListElementType, typeof(Tin));
        Tout result = (Tout)(dynamic)reply.Select(v => setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();
        return result;
    }

通用功能签名如下

    public static Tout SetEnumValue<Tout, Tin>(Tin value)

有没有办法可以配置泛型函数的返回类型?

1 个答案:

答案 0 :(得分:0)

你已经这样做了。您将TIn绑定到typeof(Tin)。问题出在其他地方:

Tout result = (Tout)(dynamic)reply.Select(v => setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();

这会给你一个List<object>。将每个单独的值转换为正确的类型:

List<Tout> result = reply.Select(v => (Tout)(dynamic)setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();

改变      public static Tout Convert(IList回复)

 public static List<Tout> Convert<Tout, Tin>(IList<Tin> reply)