Dictionaryオブジェクトに設定したいConcurrentDictionaryオブジェクトがあります。
それらの間のキャストは許可されていません。では、どうすればよいですか?
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);
なぜそれを辞書に変換する必要があるのですか? ConcurrentDictionary<K, V>
はIDictionary<K, V>
インターフェースを実装しますが、それだけでは不十分ですか?
本当にDictionary<K, V>
が必要な場合は、LINQを使用してコピーできます。
var myDictionary = myConcurrentDictionary.ToDictionary(entry => entry.Key,
entry => entry.Value);
これによりコピーになることに注意してください。 ConcurrentDictionaryはDictionaryのサブタイプではないため、cannot ConcurrentDictionaryをDictionaryに割り当てるだけです。これがIDictionaryのようなインターフェースの要点です。具体的な実装(並行/非並行ハッシュマップ)から目的のインターフェース(「ある種の辞書」)を抽象化することができます。
私はそれをする方法を見つけたと思います。
ConcurrentDictionary<int, int> concDict= new ConcurrentDictionary<int, int>( );
Dictionary dict= new Dictionary<int, int>( concDict);
ConcurrentDictionary<int, string> cd = new ConcurrentDictionary<int, string>();
Dictionary<int,string> d = cd.ToDictionary(pair => pair.Key, pair => pair.Value);