我有这个方法,它需要将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)
有没有办法可以配置泛型函数的返回类型?
答案 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)