2012-06-26 29 views
1

我有一個模塊,它遍歷一個對象的公共屬性(使用Type.GetProperties()),並對這些屬性執行各種操作。但是,有時某些屬性應該以不同的方式處理,例如忽略。例如,假設我有下面的類:如何引用一個類的屬性(不是對象)?

class TestClass 
{ 
    public int Prop1 { get; set; } 
    public int Prop2 { get; set; } 
} 

現在,我希望能夠指定每當我模塊收到類型的TestClass的對象,屬性PROP2應該被忽略。理想情況下,我希望能夠這樣說:

ReflectionIterator.AddToIgnoreList(TestClass::Prop2); 

但這顯然不起作用。我知道我可以得到一個PropertyInfo對象,如果我首先創建一個類的實例,但創建一個虛擬實例並不恰當。是否有任何其他方式可以得到TestClass :: Prop2的PropertyInfo對象?

(根據記錄,我的當前解決方案使用字符串常量,然後將其與每個屬性相比迭代通過,這樣的:

ReflectionIterator.AddToIgnoreList("NamespaceName.TestClass.Prop2"); 

,然後遍歷屬性時:

foreach (var propinfo in obj.GetProperties()) 
{ 
    if (ignoredProperties.Contains(obj.GetType().FullName + "." + propinfo.Name)) 
    // Ignore 
    // ... 
} 

但這個解決方案似乎有點凌亂和容易出錯...)

回答

4
List<PropertyInfo> ignoredList = ... 

ignoredList.Add(typeof(TestClass).GetProperty("Prop2")); 

應該做這個工作...只是檢查ignoredList.Contains(propinfo)

+0

哇,這很快,謝謝! –

+0

順便說一句,任何方式來避免字符串?爲了讓comiler&intellisense能夠幫助我? –

+0

http://stackoverflow.com/a/388841/781792答案。 –

0

你可以添加屬性到屬性來定義它們應該如何使用?例如

class TestClass 
{ 
    public int Prop1 { get; set; } 

    [Ignore] 
    public int Prop2 { get; set; } 
} 
+0

好的建議,我最終可能會朝着這個方向前進。然而,目前我不確定我是否可以控制每個可能獲得的對象,所以我可能無法添加屬性。 –

相關問題