我正在尝试在C#中实现与Python的in
运算符类似的元组,以便与dynamic
一起使用。
以下是样本:
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));
}
}
令我惊讶的是,
失败了 System.Core.dll中发生了Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
类型的未处理异常
Test.In<int>(int, System.Tuple<int>)
的最佳重载方法匹配包含一些无效参数
我想了解为什么C#最终会在第二次重载时选择第一次重载。
答案 0 :(得分:0)
想出来。 (i, i)
实际上是System.ValueTuple<dynamic, dynamic>
的一个实例。我只需要为ValueTuple
添加重载。不是dynamic
相关问题。