【问题标题】:How do I find the return type of a method with System.Reflection.MethodBase in C#?如何在 C# 中使用 System.Reflection.MethodBase 找到方法的返回类型?
【发布时间】:2010-03-22 18:25:00
【问题描述】:

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

谢谢,

【问题讨论】:

    标签: c# .net reflection postsharp


    【解决方案1】:

    MethodBase 用作MethodInfo 的基类,它有一个属性ReturnType

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

    【讨论】:

    • 如果我们想从 MemberInfo 中找到它怎么办。假设我们要过滤所有成员,例如/返回字符串类型的方法和字段。 MemberInfo 是否有任何属性表明这一点?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 次要...如果您已经在检查b is MethodInfo,那么直接转换(MethodInfo)bb as MethodInfo 稍微好一点。
      • 我遵循的准则:当您的代码可以接受 null(对于不兼容的类型)时使用 as。在这种情况下,由于在 if 中 可以接受 null,因此请改用 (MethodInfo)b。更好的是,通过使用 as 而不是 is 并针对 null 进行测试,避免了两次强制转换的成本。
      【解决方案4】:

      试试MethodInfo.ReturnType 属性。

      要获取返回类型属性,首先获取Type。从Type 获取MethodInfo。从MethodInfo,获取ReturnType

      看来你用 MethodBase 做不到...

      http://msdn.microsoft.com/en-us/library/system.reflection.methodinfo.returntype.aspx

      【讨论】:

        猜你喜欢
        • 2022-12-17
        • 2014-04-14
        • 2011-11-18
        • 2021-12-13
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 2012-04-06
        • 1970-01-01
        相关资源
        最近更新 更多