Question

J'ai un objet ConcurrentDictionary que je voudrais ensemble à un objet dictionnaire.

Castings entre eux n'est pas autorisé. Alors, comment puis-je faire?

Était-ce utile?

La solution

La classe ConcurrentDictionary<K,V> outils IDictionary<K,V> , ce qui devrait être suffisant pour la plupart des besoins. Mais si vous avez vraiment besoin d'un béton 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);

Autres conseils

Pourquoi avez-vous besoin de le convertir en un dictionnaire? ConcurrentDictionary<K, V> met en œuvre l'interface IDictionary<K, V>, est-ce pas suffisant?

Si vous avez vraiment besoin d'un Dictionary<K, V>, vous pouvez copier à l'aide de LINQ:

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

Notez que cela fait un copier . Vous ne pouvez pas simplement attribuer un ConcurrentDictionary à un dictionnaire, puisque ConcurrentDictionary n'est pas un sous-type de dictionnaire. C'est le point entier d'interfaces comme IDictionary. Vous pouvez abstraire l'interface souhaitée ( « une sorte de dictionnaire ») de la mise en œuvre du béton (hashmap concurrente / non concurrente)

Je pense que je l'ai trouvé un moyen de le faire.

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top