Pregunta

Tengo un objeto ConcurrentDictionary que quisiera establecerse en un objeto Dictionary.

No se permite la difusión entre los mismos. Entonces, ¿cómo lo hago?

¿Fue útil?

Solución

Los ConcurrentDictionary<K,V> clase implementa la IDictionary<K,V> interfaz, que debería ser suficiente para la mayoría de los requisitos. Pero si usted realmente necesita un hormigón 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);

Otros consejos

¿Por qué necesita para convertirlo en un diccionario? implementos ConcurrentDictionary<K, V> la interfaz IDictionary<K, V>, es que no es suficiente?

Si realmente necesita un Dictionary<K, V>, puede copiar que el uso de LINQ:

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

Tenga en cuenta que esto hace un copiar . Usted no puede acaba de asignar un ConcurrentDictionary a un diccionario, ya que ConcurrentDictionary no es un subtipo de diccionario. Ese es el punto de interfaces como IDictionary:. Usted puede abstraer la interfaz deseada ( "una especie de diccionario") a partir de la aplicación concreta (/ HashMap no concurrente concurrente)

Creo que he encontrado una manera de hacerlo.

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top