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