我正在尝试在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#最终选择了第一个重载而不是第二个重载。
发布于 2018-05-31 06:59:08
我想通了。(i, i)
实际上是System.ValueTuple<dynamic, dynamic>
的一个实例。我只需要为ValueTuple
添加重载。不是dynamic
-related问题。
https://stackoverflow.com/questions/50614192
复制相似问题