如果我想在兩個常規字典結合起來,這將工作:組合兩個HybridDictionaries
var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value);
但Concat
不適合HybridDictionaries工作。
我該如何結合兩個HybridDictionaries?
如果我想在兩個常規字典結合起來,這將工作:組合兩個HybridDictionaries
var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value);
但Concat
不適合HybridDictionaries工作。
我該如何結合兩個HybridDictionaries?
由於HybridDictionary僅實現IEnumerable
,所以在IEnumerable<T>
(例如Concat
)上運行的擴展方法不適用。
能夠使用Concat
你首先必須將HybridDictionary
對象轉換爲實現目標之前IDictionary<object, object>
(這又實現IEnumerable<KeyValuePair<object, object>>
)。
假設您的HybridDictionary
對象標記爲hybrid1
和hybrid2
。然後,您可以改變他們喜歡在此之前串聯:
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);