代码之家  ›  专栏  ›  技术社区  ›  LOST

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

  •  0
  • LOST  · 技术社区  · 6 年前

    我正在尝试实现类似于python的 in c中用于元组的运算符 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));
        }
    }
    

    令我惊讶的是,

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

    我想知道为什么C最终会在第二次过载的时候出现第一次过载。

    1 回复  |  直到 6 年前
        1
  •  0
  •   LOST    6 年前

    明白了。 (i, i) 实际上是 System.ValueTuple<dynamic, dynamic> 。我只需要为 ValueTuple 。不是一个 dynamic -相关问题。