2011-06-28 45 views
0

我正在尋找一種方法來返回對象中的每個字段的值,最好是以列表的形式返回,但任何集合類型都可以工作。經過一番研究,我發現這個代碼返回派生類的實例中的所有字段

FieldInfo[] fields = this.GetType().GetFields(); 

foreach(FieldInfo field in fields) 
    // Perform actions 

這是處理這個問題的正確方法嗎?另外,如果我將此方法放在基類中,如果派生類調用它,它會返回派生類還是基類中的所有字段? (或者更簡單地說,我是否需要爲每個派生類重寫此代碼?)

如果這是唯一的方法,對每個類單獨執行它並不是個問題,但我只是希望保存一些代碼,因爲我將要有50多個派生類。

回答

3

您使用GetType(),這樣將返回實際對象類型的字段,不是你聲明的方法類型。你並不需要重寫

但是,你的代碼目前只得到公共領域 - 我希望你不要有任何:)

你可能想是這樣的:

var fields = GetType().GetFields(BindingFlags.Instance | 
           BindingFlags.NonPublic | 
           BindingFlags.Public); 
... 

相信將包含繼承字段(因爲它不指定BindingFlags.DeclaredOnly),但你應該檢查。

+0

感謝您的快速響應! – shmeeps

1

是的,這是處理這個問題的正確方法。

this.GetType() whill返回對象的實際類型,所以如果它是派生類,它將返回派生類的類型,它將按預期工作。所以:不,你不必在每個子類中重寫它。

一件事:GetType()只返回公共字段。如果你還想要其他字段,那麼你需要使用過載GetType(BindingFlags)並指定適當的標誌。

+0

繼續前進並向上投票,感謝您的快速回答! – shmeeps