1

我有这个方法需要将 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)

有什么方法可以配置泛型函数的返回类型?

4

1 回答 1

0

你已经在这样做了。你绑定TIntypeof(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();

并更改公共静态 Tout Convert(IList 回复)

 public static List<Tout> Convert<Tout, Tin>(IList<Tin> reply)
于 2012-12-15T10:22:23.023 回答