30

我有一个要设置为 Dictionary 对象的 ConcurrentDictionary 对象。

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

4

4 回答 4

45

该类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);
于 2010-12-02T01:04:05.747 回答
18

为什么需要将其转换为字典?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 这样的接口的全部意义:您可以从具体实现(并发/非并发哈希图)中抽象出所需的接口(“某种字典”)。

于 2010-12-02T01:03:45.087 回答
11

我想我已经找到了一种方法。

ConcurrentDictionary<int, int> concDict= new ConcurrentDictionary<int, int>( );
Dictionary dict= new Dictionary<int, int>( concDict);
于 2010-12-02T01:09:56.543 回答
2
ConcurrentDictionary<int, string> cd = new ConcurrentDictionary<int, string>();
Dictionary<int,string> d = cd.ToDictionary(pair => pair.Key, pair => pair.Value);
于 2010-12-02T01:08:54.007 回答