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

时间:2018-05-30 22:31:54

标签: c# dynamic

我正在尝试在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#最终会在第二次重载时选择第一次重载。

1 个答案:

答案 0 :(得分:0)

想出来。 (i, i)实际上是System.ValueTuple<dynamic, dynamic>的一个实例。我只需要为ValueTuple添加重载。不是dynamic相关问题。