I have a ConcurrentDictionary object that I would like to set to a Dictionary object.
Casting between them is not allowed. So how do I do it?
I have a ConcurrentDictionary object that I would like to set to a Dictionary object.
Casting between them is not allowed. So how do I do it?
The ConcurrentDictionary<K,V>
class implements the IDictionary<K,V>
interface, which should be enough for most requirements. But if you really need a concrete 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);
Why do you need to convert it to a Dictionary? ConcurrentDictionary<K, V>
implements the IDictionary<K, V>
interface, is that not enough?
If you really need a Dictionary<K, V>
, you can copy it using LINQ:
var myDictionary = myConcurrentDictionary.ToDictionary(entry => entry.Key,
entry => entry.Value);
Note that this makes a copy. You cannot just assign a ConcurrentDictionary to a Dictionary, since ConcurrentDictionary is not a subtype of Dictionary. That's the whole point of interfaces like IDictionary: You can abstract away the desired interface ("some kind of dictionary") from the concrete implementation (concurrent/non-concurrent hashmap).
I think i have found a way to do it.
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);