如果我有:
[SomeAttr]
public Int32 SomeProperty
{
get; set;
}
SomeAttr
是否有可能告诉它附加了什么属性?是否至少可以告诉Type
property
是什么?
答案 0 :(得分:0)
在收集属性时,您可以执行的操作是为该属性设置额外信息:
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
来支持方法,字段等。)
答案 1 :(得分:0)
没有。你只能以相反的方式做到这一点。您可以查询属性(通过反射)它具有哪些属性:
Attribute.GetCustomAttributes(prop,true);
其中prop是从MemberInfo类派生的对象,该对象描述属性SomeProperty。接下来,遍历返回的属性以查看它是否包含您的属性。