2009-09-21 127 views
1

如果我有兩個對象,foobar,使用對象初始化語法delared ...合併含性能兩個對象到一個對象

object foo = new { one = "1", two = "2" }; 

object bar = new { three = "3", four = "4" }; 

是否有可能將這些組合成一個單一的對象,這將看像這樣...

object foo = new { one = "1", two = "2", three = "3", four = "4" }; 
+0

我不知道你在問什麼? – 2009-09-21 14:31:36

+0

我猜你希望能夠做到這一點給予任何兩個任意對象,而不是僅僅做foo = new {one = foo.one,three = bar.three} – ICR 2009-09-21 14:32:36

+0

(我的投票結果是重複的錯誤 - 我沒有正確閱讀這個問題。) – 2009-09-21 14:33:51

回答

7

不,你不能這樣做。在編譯時你有兩種不同的類型,但在執行時你需要第三種類型來包含屬性的聯合。

我的意思是,你可以創建一個新的組件與相關新型的......但那麼你就無法從反正你的代碼中引用「正常」。

1

假設沒有命名衝突,其可能使用反射來讀取對象的屬性,並將其合併到一個單一的類型,但你不能直接在您的代碼訪問此類型,而不在其上進行反思以及。

在4.0中,通過導入dynamic關鍵字,可以更容易地引用代碼中的動態類型。它並不能使它成爲更好的解決方案。

3

正如其他人所說,這不是方便做你的描述,但如果你只想做對綜合性能進行一些處理:

Dictionary<string, object> GetCombinedProperties(object o1, object o2) { 
    var combinedProperties = new Dictionary<string, object>(); 
    foreach (var propertyInfo in o1.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
     combinedProperties.Add(propertyInfo.Name, propertyInfo.GetValue(o1, null)); 
    foreach (var propertyInfo in o2.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
     combinedProperties.Add(propertyInfo.Name, propertyInfo.GetValue(o2, null)); 
    return combinedProperties; 
}