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