【问题标题】:Why does GetMember(string) return an array of MemberInfo?为什么 GetMember(string) 返回一个 MemberInfo 数组?
【发布时间】:2019-08-08 15:06:05
【问题描述】:

我正在使用反射并遇到错误:

System.Reflection.TargetException:对象与目标类型不匹配

因为我认为Type.GetMember(string) 只会返回一个MemberInfo,但it doesn't

我很好奇Type.GetMember(string) 返回MemberInfo[] 的原因。 Type.GetProperty()Type.GetMethod() 等其他反射方法返回它们各自的 PropetyInfoMethodInfo 对象。

Type.GetMember() 返回一个MemberInfo[] 的数组,而其他反射方法不这样做的目的是什么?

【问题讨论】:

  • C# method overloading 允许您定义多个具有相同名称和不同调用签名的方法。所以可能有多个匹配的成员,因此返回类型必须是一个数组。

标签: c# .net reflection


【解决方案1】:

因为您通过名称获取成员,并且您可能有同名方法的重载,尽管它们是不同的成员。

欲了解更多信息,您可能想访问Method signatures

【讨论】:

    【解决方案2】:

    虽然关于重载的说明是正确的,但这似乎更像是“出于历史原因”的情况。

    GetMethod(string) 被定义为返回唯一的匹配项,或者如果有多个重载则抛出AmbiguousMatchExceptionGetMember(string) 总是返回所有匹配项。

    我想这个论点是,如果你不知道你要找什么样的成员,你也不知道有多少匹配,所以最好全部返回。

    调用GetMembers 方法会更加一致,但这不是一件容易改变的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2016-04-19
      • 2012-08-26
      • 1970-01-01
      • 2020-08-07
      • 2012-05-17
      • 2020-07-07
      相关资源
      最近更新 更多