2012-01-14 18 views
17

Necesito copiar superficialmente un diccionario en C#.C# Shallow copy Dictionary?

Por ejemplo:

Dictionary<int,int> flags = new Dictionary<int,int>(); 
flags[1] = 2; 
flags[2] = 3; 
flags[0] = 9001; 
Dictionary<int,int> flagsn = flags.MemberwiseClone(); 

Desafortunadamente, que devuelve el error: "CS1540 error: No se puede acceder protegido Miembro object.MemberwiseClone()' via a qualifier of type System.Collections.Generic.Dictionary 'El calificador debe ser de tipo` PointFlagger' o derivada de él "

No estoy del todo seguro de lo que esto significa ... ¿Hay alguna otra forma de copiar poco a poco un diccionario/corregir mi código anterior?

Respuesta

35

Para obtener una copia superficial, simplemente use el constructor de Dictionary<TKey, TValue>, ya que toma un IEnumerable<KeyValuePair<TKey, TValue>>. Agregará esta colección a la nueva instancia.

Dictionary<int, int> flagsn = new Dictionary<int, int>(flags); 
+0

Duuurr! Probablemente debería haber mirado más de cerca la documentación ... ¡Muchas gracias, Jared! Aceptaré tu respuesta cuando sea posible. –

+0

Lo siento por la demora en la aceptación de la respuesta, no estoy seguro de lo que pasó allí –

+2

@Georges no hay problema. Me complace ayudar – JaredPar

6

Esta es una forma genérica que encontré en la que no tiene que escribir explícitamente cualquier tipo, que yo prefiero, por razones de mantenimiento:

var ShallowCopy = OriginalDictionary.ToDictionary(kvp => kvp.Key, kvp => kvp.Value); 
+0

¿Qué es" kvp => kvp.Key, kvp => kvp.Value "en este contexto. ¿Cómo agregaré clave y valor? Muestra un error en mi extremo – Pratik

+0

Necesita agregar una instrucción using para 'System.Linq' para acceder al método de extensión ToDictionary(). –