我知道调用会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