C# 无法在创建泛型方法时指定泛型函数返回值
我有一个方法,需要将int值列表转换为适当的enum值列表 问题是Select正在返回一个对象类型,因为我没有为泛型函数指定返回类型,因为返回类型也是泛型的C# 无法在创建泛型方法时指定泛型函数返回值,c#,c#-4.0,C#,C# 4.0,我有一个方法,需要将int值列表转换为适当的enum值列表 问题是Select正在返回一个对象类型,因为我没有为泛型函数指定返回类型,因为返回类型也是泛型的 public static Tout Convert<Tout, Tin>(IList<Tin> reply) { Type resultListElementType = typeof(Tout).GetGenericArguments()[0]; MethodInf
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)
是否有任何方法可以配置泛型函数的返回类型?您已经在这样做了。你把锡和锡绑在一起。问题出在其他地方:
Tout result = (Tout)(dynamic)reply.Select(v => setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();
这会给你一个列表。将每个单独的值转换为正确的类型:
List<Tout> result = reply.Select(v => (Tout)(dynamic)setEnumValueGenericMethod.Invoke(null, new object[] { v })).ToList();
改变
公共静态Tout转换器应答
到
问题出在托特身上。我正在寻找一种方法使泛型函数具有返回类型。通过更改转换,我将问题移出了一个级别,但并没有为我解决它。我无法控制API,因此需要能够指定返回类型。我知道我正在绑定输入参数。在运行时,未更改的签名是否始终是列表?在这种情况下,我们实际上需要重新插入您最初制作的演员阵容,然后我进入了Select。;无论如何,这是一件肮脏的事情。我想知道你为什么需要这种黑客技术?真正的问题是,通过反射调用不适当地支持返回类型,只返回对象,因此需要强制转换。我使用的APi采用包含列表的泛型,也可能不是,因为它也可能只是一个普通对象,甚至是一个字典。试图创造一个使用泛型的水平,这会引起混乱。最后,我接受了您的解决方案,截获了呼叫,并分别处理了列表处理。谢谢你的帮助。
public static List<Tout> Convert<Tout, Tin>(IList<Tin> reply)