如果我想要合并两个常规词典,这将有效:
var d3 = d1.Concat(d2).ToDictionary(x => x.Key, x => x.Value);
但Concat
对HybridDictionaries不起作用。
如何组合两个 HybridDictionaries ?
答案 0 :(得分:1)
由于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>>()
不能工作,因为键和值不会在内部以此格式存储。)
现在,使用非混合等效项,您可以应用常规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);