如何将ConcurrentDictionary转换为Dictionary?

时间:2010-12-02 00:58:21

标签: c# .net dictionary concurrentdictionary

我有一个ConcurrentDictionary对象,我想设置为Dictionary对象。

不允许在它们之间进行投射。那我该怎么做呢?

4 个答案:

答案 0 :(得分:35)

ConcurrentDictionary<K,V>类实现IDictionary<K,V>接口,这对于大多数要求应该足够了。但如果你真的需要一个具体的Dictionary<K,V> ......

var newDictionary = yourConcurrentDictionary.ToDictionary(kvp => kvp.Key,
                                                          kvp => kvp.Value,
                                                          yourConcurrentDictionary.Comparer);

// or...
// substitute your actual key and value types in place of TKey and TValue
var newDictionary = new Dictionary<TKey, TValue>(yourConcurrentDictionary, yourConcurrentDictionary.Comparer);

答案 1 :(得分:12)

为什么需要将其转换为字典? ConcurrentDictionary<K, V>实现了IDictionary<K, V>接口,这还不够吗?

如果您确实需要Dictionary<K, V>,则可以使用LINQ复制

var myDictionary = myConcurrentDictionary.ToDictionary(entry => entry.Key,
                                                       entry => entry.Value);

请注意,这会产生副本。您不能只将ConcurrentDictionary分配给Dictionary,因为ConcurrentDictionary不是Dictionary的子类型。这就是IDictionary这样的接口的全部要点:您可以从具体实现(并发/非并发hashmap)中抽象出所需的接口(“某种字典”)。

答案 2 :(得分:6)

我想我找到了办法。

ConcurrentDictionary<int, int> concDict= new ConcurrentDictionary<int, int>( );
Dictionary dict= new Dictionary<int, int>( concDict);

答案 3 :(得分:0)

ConcurrentDictionary<int, string> cd = new ConcurrentDictionary<int, string>();
Dictionary<int,string> d = cd.ToDictionary(pair => pair.Key, pair => pair.Value);