Find methods that have custom attribute using reflection

Viewed 60328

I have a custom attribute:

public class MenuItemAttribute : Attribute
{
}

and a class with a few methods:

public class HelloWorld
{
    [MenuItemAttribute]
    public void Shout()
    {
    }

    [MenuItemAttribute]
    public void Cry()
    {
    }

    public void RunLikeHell()
    {
    }
}

How can I get only the methods that are decorated with the custom attribute?

So far, I have this:

string assemblyName = fileInfo.FullName;
byte[] assemblyBytes = File.ReadAllBytes(assemblyName);
Assembly assembly = Assembly.Load(assemblyBytes);

foreach (Type type in assembly.GetTypes())
{
     System.Attribute[] attributes = System.Attribute.GetCustomAttributes(type);

     foreach (Attribute attribute in attributes)
     {
         if (attribute is MenuItemAttribute)
         {
             //Get me the method info
             //MethodInfo[] methods = attribute.GetType().GetMethods();
         }
     }
}

What I need now is to get the method name, the return type, as well as the parameters it accepts.

3 Answers
var classType = new ClassNAME();
var methods = classType.GetType().GetMethods().Where(m=>m.GetCustomAttributes(typeof(MyAttribute), false).Length > 0)
.ToArray();

Now you have all methods with this attribute MyAttribute in class classNAME. You can invoke it anywhere.

public class ClassNAME
{
    [MyAttribute]
    public void Method1(){}

    [MyAttribute]
    public void Method2(){}

    public void Method3(){}
}

class MyAttribute: Attribute { }
Related