Domanda

Ho un oggetto ConcurrentDictionary che vorrei insieme a un oggetto Dictionary.

Casting tra di loro non è permesso. Così come faccio a fare?

È stato utile?

Soluzione

ConcurrentDictionary<K,V> implementa classe IDictionary<K,V> interfaccia, che dovrebbe essere sufficiente per la maggior parte dei requisiti. Ma se si ha realmente bisogno di un concreto 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);

Altri suggerimenti

Perché è necessario convertirlo in un dizionario? implementa ConcurrentDictionary<K, V> l'interfaccia IDictionary<K, V>, è che non è sufficiente?

Se si ha realmente bisogno di un Dictionary<K, V>, è possibile copiare usando LINQ:

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

Si noti che questo fa un copiare . È può non solo assegnare un ConcurrentDictionary a un dizionario, dal momento che ConcurrentDictionary non è un sottotipo di dizionario. Questo è il punto centrale di interfacce come IDictionary:. Si può astrarre l'interfaccia desiderata ( "una sorta di dizionario") dalla concreta attuazione (/ hashmap non simultanea concorrente)

Credo di aver trovato un modo per farlo.

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top