I have a method with a custom attribute. If I have a delegate that refers to this method can I tell if th开发者_开发知识库e method referred to by the delegate has the attribute or not?
Use the GetCustomAttributes
method of the Method
property of the delegate. 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 the attribute the var v will contain it; otherwise it will be an empty array.
I'm not sure if this is the general 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
{
}
精彩评论