Estoy desarrollando una aplicación en C# targeting .NET 3.5. En él, tengo 2 diccionarios similares que contienen criterios de validación para un conjunto específico de elementos en mi aplicación. Ambos diccionarios tienen firmas idénticas. El primer diccionario tiene la configuración predeterminada y el segundo diccionario contiene algunas configuraciones definidas por el usuario.C# Merging 2 diccionarios
var default_settings = new Dictionary<string, MyElementSettings>();
var custom_settings = new Dictionary<string, MyElementSettings>();
Me gustaría combinar los 2 diccionarios en uno que contenga los elementos de ambos diccionarios.
El problema con el que me estoy encontrando es que es posible que ambos diccionarios tengan algunos de los mismos valores de clave. La regla básica que quiero es tener una combinación de ambos diccionarios y si hay alguna clave en la configuración personalizada que ya exista en la configuración predeterminada, el valor de la configuración personalizada sobrescribirá el valor predeterminado de configuración. La mejor solución que tengo es solo un bucle foreach, compruebe si la clave existe en el otro diccionario, y si no, agréguela.
foreach (var item in custom_settings)
{
if (default_settings.ContainsKey(item.Key))
default_settings[item.Key] = item.Value;
else
default_settings.Add(item.Key, item.Value);
}
He hecho algunas consultas básicas de LINQ, pero todavía estoy trabajando en aprender las cosas más avanzadas. He visto algunas consultas que fusionarán 2 diccionarios, pero la mayoría implica agrupar cualquier elemento con claves duplicadas, o solo devolver una colección con solo las claves duplicadas/¿Hay una consulta o expresión LINQ que imitará el comportamiento del bucle foreach? ¿Estoy usando?
+1 para el punto # 2 (http://msdn.microsoft.com/en-us/library/k7z0zy8k.aspx) – Brad
1 por enseñarme algo que yo no sé. Soy relativamente autodidacta con C# y nunca supe que podrías hacer eso con diccionarios. – psubsee2003
@ psubsee2003: Saludos. Estoy bastante seguro de que utilicé el mismo patrón que tu código antes de descubrir que era redundante (por casualidad, estaba hurgando con un reflector). – Ani