属性上的.NET属性

时间:2013-05-17 12:50:21

标签: c# .net reflection attributes

如果我有:

[SomeAttr]
public Int32 SomeProperty
{
  get; set;
}

SomeAttr是否有可能告诉它附加了什么属性?是否至少可以告诉Type property是什么?

2 个答案:

答案 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。接下来,遍历返回的属性以查看它是否包含您的属性。