145

我正在调用一个静态方法分析因为我不知道编译时对象的类型(但我知道它有一个分析方法,采用字符串)。

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

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

我的代码如下所示:

类型returnType=p.PropertyType;对象值=returnType。GetMethod(“解析”)。调用(空,新字符串[]{“1”});

1答案1

重置为默认值
241

使用过载和使用

returnType(返回类型)。GetMethod(“解析”,new[]{typeof(string)})
5
  • 谢谢你们的回答,伙计们。为了给下一个人省去一些麻烦,对于引用类型,可以使用这样的类型:typeof(string)。MakeByRefType();
    – 布莱比
    评论 2016年12月24日0:22
  • @什么,你不喜欢类型推断?事实上,我更喜欢Benjamin格式化它的方式。我更喜欢类型推理(它更干净)而不是显式键入。他的回答很好,风格不应该成为影响回答质量的因素。答案的结果是唯一重要的结果。 评论 2017年3月24日19:51
  • 12
    @我不“年轻”,这听起来确实是屈尊俯就。不会阅读的程序员new[]{typeof(string)}除了维护代码之外,还有其他问题。类型就在这里。再加上“疯狂的单行文字”与此无关,你喜欢的风格只是在这一行中添加了多余的字母。我认为新建类型[]{…}可读性较差,因为行更长,这是不相关的信息/样板文件/噪音。因此:这是一个风格问题,你开始讨论时用了一个被动的攻击性“如果它能迎合我的口味,就会投赞成票”。。 评论 2017年4月5日15:57
  • @苦蓝色有经验吗?我的职业生涯已经有9年,几乎10年了。我已经有很多(还有很多要学)了,但我知道冗长是给答案打分的一种可怕的方式。 评论 2017年4月5日20:55
  • 请注意,如果两个方法具有相同的名称、相同数量的参数和相同类型的参数,那么它将不起作用。这里我想到的是显式转换操作符重载。例如公共静态显式双精度(MyType obj)公共静态显式浮点(MyType obj)。您仍将拥有不明确的匹配异常。在这种情况下,您可以使用returnType(返回类型)。获取方法()。单一或默认(m=>m.名称==“op_Explicit”&&m.ReturnType==类型of(float))例如。
    – 纪尧姆
    评论 2018年9月23日23:18

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.