2010-01-16 13 views
16

¿Cómo puedo copiar objeto Dictionary por el valor en C#Copiar Diccionario de valor

+0

¿Quiere decir una copia profunda (es decir, hacer copias de todos los objetos del diccionario también)? – Paolo

Respuesta

27

Crear un nuevo Dictionary pasar el diccionario fuente en el constructor (por supuesto, esto no va a copiar los objetos en el diccionario si son tipos de referencia):

var copied = new Dictionary<KeyType, ValueType>(originalDictionary); 
-1

No hay un método intrínseco para hacerlo. Tendrás que hacerlo manualmente.

El primer paso es decidir qué tan profundo quiere que se copie la copia. ¿Desea que el objeto de entrada del diccionario por separado tenga referencias a los valores de las claves comunes &, o quiere que todo se copie? En este último caso, deberían implementar ICloneable para crear un método de propósito general.

+3

¡Advertencia! El hecho de que una clase implemente 'ICloneable' no significa que' Clone' realice una copia profunda. – jason

4
Using System.Linq; 
Dictionary<int, string> dict2 = dict1.ToDictionary(k => k.Key, k => k.Value.ToString()); 

Esto creará una copia idéntica de un diccionario por valor (no REF), para que pueda operar en un sin cambiar la otra.

+0

Las contribuciones siempre son bienvenidas, pero las respuestas nuevas deberían agregar algo * significativo * sobre las respuestas anteriores. Dado que esta pregunta ya fue respondida hace varios años, debería pensar si vale la pena resucitar solo para publicar el código generado por un traductor de código en línea ;-) – Leigh

+0

Mi respuesta original fue mi propio trabajo, sin embargo, fue escrito en formato visual BASIC. Simplemente hice referencia al convertidor de código porque este es un asunto simple que cualquiera puede hacer. Me gusta: "Déjame googleear eso para ti". Ahora, sobre la importancia. Linq supera los bucles en casi todas las situaciones. Mi respuesta es superior a la respuesta original. Me encontré con esta publicación años después de que se escribió, y la respuesta original no es satisfactoria para la profesionalidad que espera mi empresa. Publiqué la respuesta para que pueda ayudar a alguien en el futuro. Por lo tanto, no tienen que hacer algo de manera deficiente – Aaron

+0

No estoy tratando de hacerle pasar un mal rato, pero francamente al hacer referencia a un convertidor de código, parece que no está familiarizado con el idioma y está publicando algo sin probar. Ese puede no ser el caso en absoluto, pero esa era la percepción. Re: * Linq supera bucles en casi todas las situaciones. * ¿Qué respuesta recomienda bucle? Re: * Mi respuesta es superior a la respuesta original * Si es una respuesta mejor, no dude en actualizar su respuesta para indicar por qué. – Leigh

Cuestiones relacionadas