Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法在创建泛型方法时指定泛型函数返回值_C#_C# 4.0 - Fatal编程技术网

C# 无法在创建泛型方法时指定泛型函数返回值

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

我有一个方法,需要将int值列表转换为适当的enum值列表

问题是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)

是否有任何方法可以配置泛型函数的返回类型?

您已经在这样做了。你把锡和锡绑在一起。问题出在其他地方:

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)