C# - 使用Reflection调查“方法”信息?

时间:2009-09-21 20:22:55

标签: c# reflection

我的目的是使用反射调查类型的“方法”以验证以下内容:

  1. 方法应该是实例方法和公共方法。

  2. 采用参数“params”并且性质无效。

  3. 方法不进行递归调用。

  4. 我开始时:

    static void ProcessMethodInfo(Type t)
        {
            MethodInfo[] info = t.GetMethods();
    
            foreach (MethodInfo mi in info)
            {
    
              // How to check the conditions here ?  
    
            }
        }
    

    但我不知道如何继续前进。需要帮助。

4 个答案:

答案 0 :(得分:3)

好吧,如果用3表示检查中的方法应该是非递归的;那是痛苦的 - 你需要解析IL。但对其他人而言;

    Type type = ...
    var qry = from method in type.GetMethods(
                  BindingFlags.Instance | BindingFlags.Public)
              where method.ReturnType == typeof(void)
              let parameters = method.GetParameters()
              where parameters.Length == 1
              && parameters[0].ParameterType.IsArray
              && Attribute.IsDefined(parameters[0], typeof(ParamArrayAttribute))
              select method;
    foreach (var method in qry)
    {
        Console.WriteLine(method.Name);
    }

答案 1 :(得分:1)

答案 2 :(得分:0)

我认为您无法使用反射检测第3项。

答案 3 :(得分:0)

检查MethodInfo类的以下成员:

  • IsPublic
  • IsStatic
  • 返回类型
  • GetParameters()方法

为了能够检查方法是否是递归的,我认为你需要更多的东西,然后只需要简单的反思。