Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中找到System.Reflection.MethodBase方法的返回类型?_C#_.net_Reflection_Postsharp - Fatal编程技术网

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

如何在C#中找到System.Reflection.MethodBase方法的返回类型?,c#,.net,reflection,postsharp,C#,.net,Reflection,Postsharp,如何从MethodBase中找到方法的返回类型?我正在使用PostSharp并尝试重写CompileTimeValidate(MethodBase方法)方法,以确保属性应用于具有正确签名的方法 谢谢,MethodBase用作具有属性的基类 您可以尝试强制转换到MethodInfo的实例并检查该属性。MethodBase本身没有返回类型,因为除了普通方法外,它还用于表示没有返回类型的方法,例如构造函数。相反,您需要查看它是否是MethodInfo的实例,并检查ReturnType属性 Compil

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


谢谢,

MethodBase用作具有属性的基类


您可以尝试强制转换到MethodInfo的实例并检查该属性。

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

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

试试这样的
MethodInfo
具有该属性,但
MethodBase
也用于构造函数,并且它们没有返回类型

MethodBase b = this.GetType().GetMethods().First(); 
if(b is MethodInfo)
    MessageBox.Show((b as MethodInfo).ReturnType.Name);

尝试
MethodInfo.ReturnType
属性

要获取返回类型属性,首先获取
类型
。从
类型
,获取
方法信息
。从
MethodInfo
获取
ReturnType

看来你不能用MethodBase做这件事


次要问题…如果您已经在检查
b is MethodInfo
,那么直接转换
(MethodInfo)b
b as MethodInfo
稍微好一点。我遵循的准则是:当接收空值(对于不兼容的类型)时,您的代码可以接受
as
。在这种情况下,由于if中不接受空值,因此请改用
(MethodInfo)b
。更好的是,通过使用
as
而不是
is
并针对null进行测试来避免两次强制转换的成本。如果我们想从MemberInfo中找到它呢。假设在这个场景中,我们希望过滤所有成员,比如返回字符串类型的方法和字段。MemberInfo是否有任何属性表明这一点?