Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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#_Dynamic - Fatal编程技术网

C# 用于动态调用的错误泛型重载

C# 用于动态调用的错误泛型重载,c#,dynamic,C#,Dynamic,我正在尝试实现类似于Python在C中的操作符的,以便元组与动态一起使用 以下是示例: using System; public static class Test { static bool In<T>(T value, Tuple<T> a) => value.Equals(a.Item1); static bool In<T>(T value, Tuple<T, T> a) => value.Equals(a.I

我正在尝试实现类似于Python在C中的
操作符的
,以便元组与
动态
一起使用

以下是示例:

using System;

public static class Test {
    static bool In<T>(T value, Tuple<T> a) => value.Equals(a.Item1);
    static bool In<T>(T value, Tuple<T, T> a) => value.Equals(a.Item1) || value.Equals(a.Item2);

    static void Main() {
        dynamic i = 0;
        In(i, (i, i));
    }
}
使用系统;
公共静态类测试{
静态bool-In(T值,元组a)=>value.Equals(a.Item1);
静态bool In(T值,元组a)=>value.Equals(a.Item1)| | value.Equals(a.Item2);
静态void Main(){
动态i=0;
在(i,(i,i));
}
}
令我惊讶的是,这一点在

System.Core.dll中发生类型为Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
的未处理异常
Test.In(int,System.Tuple)
的最佳重载方法匹配有一些无效参数

我想理解为什么C#最终选择了第一个过载而不是第二个过载。

找到了答案
(i,i)
实际上是
System.ValueTuple
的一个实例。我只需要为
ValueTuple
添加重载。不是与
动态相关的问题