C# 避免不明确的匹配异常

C# 避免不明确的匹配异常,c#,reflection,ambiguous-call,C#,Reflection,Ambiguous Call,我通过反射对类型调用静态方法解析,因为我在编译时不知道对象的类型(但我知道,它有一个解析方法,使用字符串) 然而,我得到了一个不明确的匹配异常,可能是因为有很多重载解析方法,每个方法都接受一个对象(string、int、double等) 如何在方法调用中更加具体,以确保到达正确的方法(解析(字符串s))并且不会引发异常 我的代码如下所示: Type returnType = p.PropertyType; object value = returnType.GetMethod("Parse").

我通过反射对类型调用静态方法解析,因为我在编译时不知道对象的类型(但我知道,它有一个解析方法,使用字符串)

然而,我得到了一个不明确的匹配异常,可能是因为有很多重载解析方法,每个方法都接受一个对象(string、int、double等)

如何在方法调用中更加具体,以确保到达正确的方法(解析(字符串s))并且不会引发异常

我的代码如下所示:

Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
使用重载和

returnType.GetMethod("Parse", new [] {typeof(string)})

“苦蓝色”我很困惑你为什么要写那篇评论——为什么你会考虑风格值得讨论的问题?演示文稿是好的,它恰好遵循一种不同于你喜欢的风格。你的评论是这样的:“如果这个车棚再蓝一点,我就用它。”。这让我很困惑。编辑注释:除非您不知道new[]{}实际上推断了数组的类型,并且在本例中等同于new type[]?在这种情况下,我很抱歉-我假设您在评论该样式(两种都有效)的同时可能认为该片段是错误的(不是)。谢谢您的回答,伙计们。为了给下一个家伙省去一些麻烦,对于引用类型,请使用以下内容:typeof(string).MakeByRefType()@我不年轻,这听起来确实有点屈尊。不能读取
new[]{typeof(string)}
的程序员除了维护代码之外还有其他问题。这种类型就在那里。加上“疯狂的一行”不相关,你喜欢的风格只是在这行中添加了多余的字母。我认为
新类型[]{…}
可读性较差,因为行较长,这与信息/样板文件/噪音无关。因此:这是一个风格问题,而你在开始讨论时使用了一个被动攻击性的“如果它符合我的口味的话,可能会投更高的票”……小心,如果两个方法具有相同的名称、相同数量的参数和相同类型的参数,那么它将不起作用。我在这里考虑显式强制转换运算符重载。例如,
公共静态显式双精度(MyType obj)
公共静态显式浮点(MyType obj)
。您仍将有一个
模糊匹配异常
。在本例中,您可以使用
returnType.GetMethods().SingleOrDefault(m=>m.Name==“op_Explicit”&&m.returnType==typeof(float))