结合两个HybridDictionaries

时间:2014-02-27 09:33:42

标签: c# dictionary hybrid

如果我想要合并两个常规词典,这将有效:

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

Concat对HybridDictionaries不起作用。

如何组合两个 HybridDictionaries

1 个答案:

答案 0 :(得分: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>>() 不能工作,因为键和值不会在内部以此格式存储。)

现在,使用非混合等效项,您可以应用常规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);