首页 > 解决方案 > 用于动态调用的错误泛型重载

问题描述

我正在尝试在 C# 中实现类似于 Pythonin运算符的东西,以便元组与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# 最终选择第一个重载而不是第二个重载。

标签: c#dynamic

解决方案


弄清楚了。(i, i)实际上是 的一个实例System.ValueTuple<dynamic, dynamic>。我只需要为ValueTuple. 不是一个dynamic相关的问题。


推荐阅读