How to interrogate method attributes through a delegate?

I have a method with a custom attribute. If I have a delegate that references this method, can I tell if the method mentioned by the delegate has an attribute or not?

+6
c #
source share
2 answers

I am not sure if this is a common case, but I think so. Try the following:

class Program { static void Main(string[] args) { // display the custom attributes on our method Type t = typeof(Program); foreach (object obj in t.GetMethod("Method").GetCustomAttributes(false)) { Console.WriteLine(obj.GetType().ToString()); } // display the custom attributes on our delegate Action d = new Action(Method); foreach (object obj in d.Method.GetCustomAttributes(false)) { Console.WriteLine(obj.GetType().ToString()); } } [CustomAttr] public static void Method() { } } public class CustomAttrAttribute : Attribute { } 
+2
source share

Use the GetCustomAttributes method of the delegate Method property. Here's a sample:

  delegate void Del(); [STAThread] static void Main() { Del d = new Del(TestMethod); var v = d.Method.GetCustomAttributes(typeof(ObsoleteAttribute), false); bool hasAttribute = v.Length > 0; } [Obsolete] public static void TestMethod() { } 

If the method has an attribute, var v will contain it; otherwise it will be an empty array.

+3
source share

All Articles