我了解调用GetCustomAttribute
会返回一个新生成的属性,但为什么我无法使用Attribute
属性获取该属性?
我已经附上了这个例子:
说明:
public class MyTestAttribute : Attribute
{
public int Test { get; set; }
}
public class TestClass
{
[MyTest]
public int Property { get; set; }
}
代码:
// 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