c# - 用于动态调用的错误泛型重载
问题描述
我正在尝试在 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# 最终选择第一个重载而不是第二个重载。
解决方案
弄清楚了。(i, i)
实际上是 的一个实例System.ValueTuple<dynamic, dynamic>
。我只需要为ValueTuple
. 不是一个dynamic
相关的问题。
推荐阅读
- python - 如何使用带有网格几何管理器的 Tkinter 使用 Python3 创建此布局?
- dialogflow-es - DialogFlow 手动切换到 Facebook Messenger
- javascript - 我的 d3 js 图表刷和缩放不适用于背景
- c# - 如何在cshtml的选择列表中选择默认值?
- python - 在 QTextEdit 中滚动时导致出现问题的 drawText
- c - fork 后为每个孩子生成随机等待时间
- c# - 如何通过客户端.net核心Windows应用程序更新json特定键值
- amazon-web-services - 如何在中转网关模块 terraform 中创建附件
- r - 如何合并列和行数不均的两个表?
- python - 使用机器学习和 python 预测律师的费用