Access to the value of a Custom Attribute

Viewed 48402

I've got this custom attribute:

[AttributeUsage(AttributeTargets.Method, AllowMultiple=false, Inherited = true)]
class MethodTestingAttibute : Attribute
{   
    public string Value{ get; private set; }
    public MethodTestingAttibute (string value)
    {
        this.Value= value;

    }
}

To be used like this:

[MethodTestingAttibute("2")]
public int m1() {return 3; }

And my difficulty is to take the value of "2" of MethodTestingAttibute

object result = method.Invoke(obj, new Type[] {}); // here i get the return

Now I want to compare this result to the value of MethodTestingAttibute. How can I do that? I'm trying to go up to this road but without success:

method.GetCustomAttributes(typeof(MethodTestAttibute), true)[0]...

What is the proper way to get access to the field of the custom attribute?

6 Answers

With my custom attribute:

[AttributeUsage(AttributeTargets.Method)]
public class AttributeCustom : Attribute
{
    public string MyPropertyAttribute { get; private set; }

    public AttributeCustom(string myproperty)
    {
        this.MyPropertyAttribute = myproperty;
    }
}

I create a method for to get attribute with his values:

public static AttributeCustom GetAttributeCustom<T>(string method) where T : class
{
    try
    {
        return ((AttributeCustom)typeof(T).GetMethod(method).GetCustomAttributes(typeof(AttributeCustom), false).FirstOrDefault());
    }
    catch(SystemException)
    {
        return null;
    }
}

With a example class (must be not static because T is generic)

public class MyClass
{
    [AttributeCustom("value test attribute")])
    public void MyMethod() 
    {
        //...
    }
}

Usage:

var customAttribute = GetAttributeCustom<MyClass>("MyMethod");
if (customAttribute != null)
{
    Console.WriteLine(customAttribute.MyPropertyAttribute);
}
Related