mardi 26 mai 2015

Why does fetching Attributes work differently when using PropertyDescriptor & PropertyInfo?

I understand that calling GetCustomAttribute returns a new generated attribute, but why can't I get the attribute using the Attribute property?

I've attached this example:

Definitions:

    public class MyTestAttribute : Attribute
    {
       public int Test { get; set; }
    }

    public class TestClass
    {
       [MyTest]
       public int Property { get; set; }
    }

Code:

    // PropertyInfo
    var prop = typeof(TestClass).GetProperty("Property");
    var attr1 = prop.GetCustomAttribute(typeof(MyTestAttribute), false) as MyTestAttribute;
    attr1.Test = 12;

    var attr2 = prop.GetCustomAttribute(typeof(MyTestAttribute), false) as MyTestAttribute;
    // attr2.Test == 0 since GetCustomAttribute creates a new attribute.
    var attr3 = prop.Attributes; //attr3 = None

    // PropertyDescriptor
    var tProp = TypeDescriptor.GetProperties(typeof(TestClass)).Cast<PropertyDescriptor>().First(p => p.Name == "Property");
    var tAttr1 = tProp.Attributes.Cast<Attribute>().OfType<MyTestAttribute>().First();
    tAttr1.Test = 12;

    var tProp2 = TypeDescriptor.GetProperties(typeof(TestClass)).Cast<PropertyDescriptor>().First(p => p.Name == "Property");
    var tAttr2 = tProp2.Attributes.Cast<Attribute>().OfType<MyTestAttribute>().First(); 
    // tAttr2.Test == 12





Aucun commentaire:

Enregistrer un commentaire