2013-05-17 58 views
0

属性如果我有:.NET的房产

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

是否有可能为SomeAttr告诉什么财产它上涨到?是否至少可以告诉Typeproperty是什么?

+0

你从哪里得到SomeAttr“list”?从一个类型,不是? –

+0

你是什么意思? – Andrew

+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来支持方法,字段等)

+0

看起来像我们同时发布 –

+0

@Frank:差3分钟。 :) –

+0

是的,我知道我可以走这个方向,我只是希望相反...... – Andrew

0

不可以。您只能以相反方式进行操作。您可以查询属性(通过反射)它具有的属性:

Attribute.GetCustomAttributes(prop,true);

其中prop是从MemberInfo类派生的对象,该类描述属性SomeProperty。接下来你遍历返回的属性,看它是否包含你的属性。