2011-05-12 164 views
20

我正在嘗試讀取給定對象的所有屬性,只讀取那些在對象類型上聲明的屬性,不包括那些繼承的屬性。 IE:獲取非繼承屬性

class Parent { 
    public string A { get; set; } 
} 

class Child : Parent { 
    public string B { get; set; } 
} 

所以我只想讓B回來。閱讀文檔,我假設下面是我需要的,但實際上什麼都沒有返回。

var names = InstanceOfChild.GetType().GetProperties(BindingFlags.DeclaredOnly).Select(pi => pi.Name).ToList(); 
+0

感謝這個問題,我只是拉我的頭髮在這個 – 2012-04-21 06:01:05

回答

22

只需要幾個其他的BindingFlags

var names = InstanceOfChild.GetType().GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance).Select(pi => pi.Name).ToList(); 
5

嘗試這種情況:

var names = InstanceOfChild.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Select(pi => pi.Name).ToList(); 

我加入其中根據MSDN documentation尊敬的BidningFlags.InstanceBindingFlags.Public到搜索參數:

指定實例成員是 被包括在搜索。

指定公共成員都 包含在搜索中。

+1

它的直覺,我認爲實例標誌這裏需要 – 2012-04-21 06:06:22