如果我有:
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
SomeAttr
是否有可能告诉它所附加的属性?至少有可能知道Type
和property
是什么吗?
No。你只能反过来做。您可以查询属性(通过反射)它具有哪些属性:
属性。GetCustomAttributes(道具,真);
其中prop是从描述属性SomeProperty的MemberInfo类派生出来的对象。接下来,遍历返回的属性,看看它是否包含您的属性。
不行。没有直接。
在收集属性的那一刻,你能做的就是用额外的信息设置该属性:
class SomeAttr: Attribute
{
public PropertyInfo Target {get;set;}
}
…当你收集好信息后:
Type type = ... // The type which holds the property.
PropertyInfo propertyInfo = typeo.GetProperty("SomeProperty");
Type propertyType = propertyInfo.PropertyType;
SomeAttr attr = propertyInfo.GetCustomAttributes(false).OfType<SomeAttr>().FirstOrDefault();
attr.Target = propertyInfo; // <== Set the target information.
这样,您就可以在代码的另一点检索它的目标成员:
public void DoSomethingWithAttribute(SomeAttr attr)
{
PropertyInfo whichProperty = attr.Target;
}
(也可以使用基类MemberInfo
来支持方法、字段等)