【发布时间】:2010-03-22 18:25:00
【问题描述】:
如何从 MethodBase 中找出方法的返回类型?我正在使用 PostSharp 并尝试覆盖 CompileTimeValidate(MethodBase 方法) 方法,以确保将属性应用于具有正确签名的方法。
谢谢,
【问题讨论】:
标签: c# .net reflection postsharp
如何从 MethodBase 中找出方法的返回类型?我正在使用 PostSharp 并尝试覆盖 CompileTimeValidate(MethodBase 方法) 方法,以确保将属性应用于具有正确签名的方法。
谢谢,
【问题讨论】:
标签: c# .net reflection postsharp
MethodBase 用作MethodInfo 的基类,它有一个属性ReturnType。
您可以尝试强制转换为 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);
【讨论】:
b is MethodInfo,那么直接转换(MethodInfo)b 比b as MethodInfo 稍微好一点。
as。在这种情况下,由于在 if 中 不 可以接受 null,因此请改用 (MethodInfo)b。更好的是,通过使用 as 而不是 is 并针对 null 进行测试,避免了两次强制转换的成本。
试试MethodInfo.ReturnType 属性。
要获取返回类型属性,首先获取Type。从Type 获取MethodInfo。从MethodInfo,获取ReturnType。
看来你用 MethodBase 做不到...
http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.returntype.aspx
【讨论】: