避免模糊匹配异常

144

我正在通过反射调用一个类型上的静态方法Parse,因为我不知道编译时对象的类型(但我知道它有一个接受字符串参数的Parse方法)。

然而,我遇到了一个模糊匹配异常,可能是因为有很多重载的Parse方法,每个方法都接受单个对象(例如字符串、整数、双精度等)。

我该如何在方法调用中更具体,以确保我可以访问正确的方法(Parse(string s)),并且不会引发异常。

我的代码看起来像这样:

Type returnType = p.PropertyType;
object value = returnType.GetMethod("Parse").Invoke(null, new string[] { "1" });
1个回答

237
使用重载并使用。
returnType.GetMethod("Parse", new [] {typeof(string)})

10
@Bitterblue,我不明白你为什么写下那条评论,以及为什么你认为风格问题值得讨论? - Benjamin Podszun
10
演示很好,只是它的风格与你喜欢的不同。你提到过“如果这个自行车棚再蓝一点就更好了”。这让我有些困惑。修改评论:除非你不知道新[]{}实际上可以推断出数组的类型,并且在这种情况下等效于new Type[]?如果是这种情况,我很抱歉——我认为你是在评论风格(两者都可以),同时可能认为代码片段有误(但实际上并没有)。 - Benjamin Podszun
11
@Bitterblue,我并不是年轻人,你那样说听起来很轻蔑。一个程序员如果不能读懂new [] { typeof(string) },除了代码维护方面还存在其他问题。类型就在那里明明白白地写着。此外,“疯狂的一行式”与此无关,您偏好的风格只会在这一行中添加冗余字母。我认为new Type[] {...}不如原始写法易读,因为它使这一行变得更长,并且包含了无关的信息/模板/噪音。因此:这只是一种风格问题,而你却以一种消极攻击的方式开始了这场讨论:“如果能迎合我的口味,我会点赞”。 - Benjamin Podszun
3
注意,如果两个方法具有相同的名称、参数数量和参数类型,则它们将无法正常工作。在这里指的是显式转换操作符重载。例如 public static explicit double(MyType obj)public static explicit float(MyType obj)。您仍将面临 AmbiguousMatchException 异常。在这种情况下,您可以使用 returnType.GetMethods().SingleOrDefault(m => m.Name == "op_Explicit" && m.ReturnType == typeof(float)) 来解决问题。 - Guillaume
2
除了 BRebey 和 Guillame 的评论之外,所有其他评论都是完全无关和分散注意力的,请将它们删除。 - reggaeguitar
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接