2013-05-17 87 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。接下來你遍歷返回的屬性,看它是否包含你的屬性。