如何使用System.Reflection.MethodBase在C#中查找方法的返回类型?

29

如何从MethodBase中找出方法的返回类型?我正在使用PostSharp,并尝试覆盖CompileTimeValidate(MethodBase method)方法,以确保该属性应用于具有正确签名的方法。

谢谢。

4个回答

23

MethodBase本身没有返回类型,因为除了普通方法外,它还用于表示没有返回类型的方法,例如构造函数。 因此,您需要查看其是否是MethodInfo的实例,并检查其中的ReturnType属性。

CompileTimeValidate(MethodBase method) {
  var normalMethod = method as MethodInfo;
  if( normalMethod != null) {
    ValidateReturnType(normalMethod.ReturnType);
  }
}

23

MethodBase被用作MethodInfo的基类,后者拥有一个ReturnType属性。

您可以尝试将其转换为MethodInfo实例,并检查该属性。


如果我们想从MemberInfo中找到它怎么办?假设我们想要过滤所有成员,比如方法和字段,它们是/返回字符串类型的。MemberInfo有任何属性可以指示这一点吗? - Aryan Firouzian

2
尝试像这样做。 MethodInfo 具有该属性,但是对于构造函数使用的是 MethodBase,它们没有返回类型。
MethodBase b = this.GetType().GetMethods().First(); 
if(b is MethodInfo)
    MessageBox.Show((b as MethodInfo).ReturnType.Name);

2
小细节……如果您已经检查了 b 是否为 MethodInfo,那么直接强制转换 (MethodInfo)b 稍微优于 b as MethodInfo - Adam Robinson
2
我所遵循的准则是:当接收到null(对于不兼容类型)可接受时,请使用as。在这种情况下,由于if内部接受null,请改用(MethodInfo)b。更好的方法是通过使用as而不是is并测试是否为null来避免两次转换的成本。 - Bevan

0

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