C# 用于动态调用的错误泛型重载
我正在尝试实现类似于Python在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
操作符的,以便元组与动态一起使用
以下是示例:
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
添加重载。不是与动态相关的问题