2014-02-27 28 views
0

如果我想在兩個常規字典結合起來,這將工作:組合兩個HybridDictionaries

var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value); 

Concat不適合HybridDictionaries工作。

我該如何結合兩個HybridDictionaries

回答

1

由於HybridDictionary僅實現IEnumerable,所以在IEnumerable<T>(例如Concat)上運行的擴展方法不適用。

能夠使用Concat你首先必須將HybridDictionary對象轉換爲實現目標之前IDictionary<object, object>(這又實現IEnumerable<KeyValuePair<object, object>>)。

假設您的HybridDictionary對象標記爲hybrid1hybrid2。然後,您可以改變他們喜歡在此之前串聯:

var nonHybrid1 = hybrid1.Keys.OfType<object>().ToDictionary(key => key, key => hybrid1[key]); 
var nonHybrid2 = hybrid2.Keys.OfType<object>().ToDictionary(key => key, key => hybrid2[key]); 

(注:hybrid1.Cast<KeyValuePair<object, object>>()工作,因爲鍵和值不會以這種格式存儲在內部。)現在

,與非-hybrid當量你可以申請定期LINQ操作,如Concat

var nonHybrid3 = nonHybrid1.Concat(nonHybrid2); 

這將離開你IEnumerable<KeyValuePair<object, object>>類型的對象。要將其轉換爲HybridDictionary,您需要構建新對象並手動添加鍵和值:

var hybrid3 = new HybridDictionary(); 
foreach (var kv in nonHybrid3) hybrid3.Add(kv.Key, kv.Value);