如果我有兩個對象,foo
和bar
,使用對象初始化語法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" };
如果我有兩個對象,foo
和bar
,使用對象初始化語法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" };
不,你不能這樣做。在編譯時你有兩種不同的類型,但在執行時你需要第三種類型來包含屬性的聯合。
我的意思是,你可以創建一個新的組件與相關新型的......但那麼你就無法從反正你的代碼中引用「正常」。
假設沒有命名衝突,其可能使用反射來讀取對象的屬性,並將其合併到一個單一的類型,但你不能直接在您的代碼訪問此類型,而不在其上進行反思以及。
在4.0中,通過導入dynamic
關鍵字,可以更容易地引用代碼中的動態類型。它並不能使它成爲更好的解決方案。
正如其他人所說,這不是方便做你的描述,但如果你只想做對綜合性能進行一些處理:
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;
}
我不知道你在問什麼? – 2009-09-21 14:31:36
我猜你希望能夠做到這一點給予任何兩個任意對象,而不是僅僅做foo = new {one = foo.one,three = bar.three} – ICR 2009-09-21 14:32:36
(我的投票結果是重複的錯誤 - 我沒有正確閱讀這個問題。) – 2009-09-21 14:33:51