2009-08-07 24 views
6

我有這樣一個類:Type.GetProperties方法

class ItemList 
{ 
    Int64 Count { get; set; } 
} 

,當我寫這篇文章:

ItemList list = new ItemList (); 

Type type = list.GetType (); 
PropertyInfo [ ] props = type.GetProperties (); 

我得到道具空數組。

爲什麼?是否因爲GetProperties不包含自動屬性?

+6

'所有誰來自谷歌:'如果你仍然無法甚至設置標誌後,讓你的「屬性」,如果你是新來的C#不知道'Properties'和'Fields'之間的區別,請嘗試使用'GetFields()'。你可能一直在尋找'田野'! – user1306322 2012-08-30 06:37:05

回答

18

問題是GetProperties默認只返回公共屬性。在C#中,成員默認是不公開的(我相信他們是內部的)。試試這個代替

var props = type.GetProperties(BindingFlags.Instance | BindingFlags.NonPublic); 

BindingFlags枚舉相當靈活。上述組合將返回類型上的所有非公共實例屬性。不管可訪問性如何,您可能希望的是所有實例屬性。在這種情況下,請嘗試以下

var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 
var props = type.GetProperties(flags); 
+0

謝謝,沒有意識到。另外你如何能夠爲單個參數提供多個選項? BindingFlags位,你轉移? – 2009-08-07 18:15:20

+1

@Joan,是的。 BindingFlags是一個使用位標誌的枚舉,您可以使用|來操作它。它不提供多個參數,只是創建一個具有各種位組合設置的枚舉值。 – JaredPar 2009-08-07 18:16:41

+1

Joan:綁定標誌是一個標誌枚舉,所以你可以使用|將多個標誌傳遞給函數。 – 2009-08-07 18:17:21

相關問題