C#反射报错之System.Reflection.AmbiguousMatchException:“Ambiguous match found.
.NET6 Type t = typeof(double).GetMethod("TryParse").GetParameters()[1].ParameterType;
Console.WriteLine(t.Name);报错System.Reflection.AmbiguousMatchException:“Ambiguous match found.”
这个错误通常是因为在使用反射时存在方法重载,导致无法确定要获取哪个重载方法的参数信息。在这个特定的例子中,.GetMethod("TryParse") 可能匹配到多个重载版本的 TryParse 方法。
double.TryParse 方法有多个重载,每个重载版本的参数个数和类型都可能不同,这就导致了上述代码中的歧义性匹配。要解决这个问题,你可以通过获取特定版本的 TryParse 方法,或者通过进一步精确指定方法的参数类型来避免歧义性匹配。
以下是两种可能的解决方法:
方法1:获取特定版本的 TryParse 方法
可以通过指定参数类型来获取特定版本的 TryParse 方法,避免歧义性匹配。例如,假设你想要获取接受 string 和 out double 参数的 TryParse 方法,可以这样做:
Type[] parameterTypes = { typeof(string), typeof(double).MakeByRefType() };
MethodInfo tryParseMethod = typeof(double).GetMethod("TryParse", parameterTypes);
if (tryParseMethod != null)
{
Type t = tryParseMethod.GetParameters()[1].ParameterType;
Console.WriteLine(t.Name); // 输出 "Double&"
}
else
{
Console.WriteLine("Method not found.");
}
方法2:获取所有 TryParse 方法并进一步处理
你也可以获取所有重载版本的 TryParse 方法,然后根据参数的个数和类型来进一步处理。以下是一个示例代码,展示如何获取所有 TryParse 方法并输出其参数类型:
MethodInfo[] tryParseMethods = typeof(double).GetMethods()
.Where(method => method.Name == "TryParse")
.ToArray();
foreach (MethodInfo method in tryParseMethods)
{
ParameterInfo[] parameters = method.GetParameters();
if (parameters.Length == 2)
{
Type t = parameters[1].ParameterType;
Console.WriteLine($"{method.Name}({parameters[0].ParameterType.Name}, {t.Name})");
}
}
这将输出所有符合参数个数为 2 的 TryParse 方法及其参数类型。根据实际需求,你可以进一步筛选和处理这些方法。
C#反射报错之System.Reflection.AmbiguousMatchException:“Ambiguous match found.的更多相关文章
- “System.Reflection.AmbiguousMatchException”类型的异常在 mscorlib.dll 中发生
错误提示: “System.Reflection.AmbiguousMatchException”类型的异常在 mscorlib.dll 中发生,但未在用户代码中进行处理. 发现不明确的匹配. 问题原 ...
- 报错:System.NotSupportedException: LINQ to Entities does not recognize the method
报错:System.NotSupportedException: LINQ to Entities does not recognize the method ...... get_Item(Int3 ...
- 报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败
使用MVC和EF,在保存数据的时候报错:System.Data.Entity.Validation.DbEntityValidationException: 对一个或多个实体的验证失败.有关详细信息, ...
- docker运行报错docker0: iptables: No chain/target/match by that name.
转自:https://blog.csdn.net/wohaqiyi/article/details/84450562 docker运行报错docker0: iptables: No chain/tar ...
- C# 基于密码的身份验证报错问题System.Net.NetworkCredential
今天碰到个很奇怪的问题,在用下面这段代码调试时获取身份验证时居然报错,更奇怪的是本地VS中调试正常而在虚机上调试就报错了 ClientCredentials clientCredentials = n ...
- 反射报错java.lang.IllegalArgumentException: wrong number of arguments
class Person{ private String name ; private String sex ; public Person(){ System.out.println("c ...
- java 反射 报错:Attempt to get java.lang.Integer field "..." with illegal data type conversion to int
类: Integer id; 反射时: Field f = User.class.getDeclaredField("id"); f.setAccessible(true); in ...
- ASP.NET MVC 认证模块报错:“System.Configuration.Provider.ProviderException: 未启用角色管理器功能“
新建MVC4项目的时候 选 Internet 应用程序的话,出来的示例项目就自带了默认的登录认证等功能.如果选空或者基本,就没有. 如果没有,现在又想加进去,怎么办呢? 抄啊.将示例项目的代码原原本本 ...
- .Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy
系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.Inval ...
- Ubuntu系统报错The system is running in low-graphics mode
Ubuntu系统报错:The system is running in low-graphics mode 我遇到过两次这种请况,这次解决了.很nice! 在csdn上搜到的大部分操作是: 鼠标进入系 ...
随机推荐
- redis - [07] 数据类型
redis是一个开源(BSD许可)的,内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件MQ.它支持多种类型的数据结构,如字符串(String).散列(Hash).列表(List).集合( ...
- CDH - [01] 概述
一.什么是CDH CDH是Cloudera's Distribution Including Apache Hadoop的缩写,即Cloudera公司发布的Hadoop发行版.它是一个为Hadoo ...
- 寻找旋转排序数组中的最小值 II
地址:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/ <?php /** 154. 寻找旋转排 ...
- CRYPTO-DSA
CRYPTO-DSA 参考某位大佬的博客和nss的一些题目,这两天的DSA题目 DSA数字签名 | DexterJie'Blog [NCTF 2021]dsa task.py from Crypto. ...
- verilator书写C++版模块testbench
默认顶层模型名称为top,环境名称为contextp const std::unique_ptr<VerilatedContext> contextp{new VerilatedConte ...
- antd+vue 中select组件的自定义后缀图标不显示问题记录
根据项目需求,需要使用select组件,并自定义后缀图标,但是设置了没的效果,这是我的代码和效果图 后来查看代码发现需要给select组件加上showArrow属性,然后实现了效果,看效果图 这里记录 ...
- Creo 4.0二次开发工具框架搭建
一.新建MFC DLL工程 二.配置项目属性 附加依赖项中输入:netapi32.lib;psapi.lib;mpr.lib;wsock32.lib;protk_dll_NU.lib;protk_d ...
- DNS+scapy学习
DNS前置知识 大部分介绍转自这篇文章. 官方解释: DNS ( Domain Name System ,域名系统) ,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联 ...
- mvc api 下载文件问题
背景:前后端分离项目,文件下载 项目中 因为实际文件名和路径里的文件名 不一致(一般路径文件名需要使用唯一名字) 刚开始使用返回链接的方式,会出现图片直接预览,文件名会以路径文件名下载,用户体验不好. ...
- 继承内存图--java进阶 day01
主方法进栈,有new进堆 堆内存中先存自己类中有的变量 又因为继承了父类,所以父类中的变量也要存入 即使被私有化,依旧可以继承,只是没有权限使用! 创建对象时,会调用构造方法,所以走构造方法,实参传形 ...