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>ますが、それだけでは不十分ですか?

本当に必要な場合は、 LINQを使用してコピーDictionary<K, V>できます。

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 に答える