Sto sviluppando un'applicazione in C# con targeting per .NET 3.5. In esso, ho 2 dizionari simili che contengono criteri di convalida per un insieme specifico di elementi nella mia app. Entrambi i dizionari hanno firme identiche. Il primo dizionario ha le impostazioni predefinite e il secondo dizionario contiene alcune impostazioni definite dall'utente.C# Merging 2 dizionari
var default_settings = new Dictionary<string, MyElementSettings>();
var custom_settings = new Dictionary<string, MyElementSettings>();
Vorrei unire i 2 dizionari in uno che contiene gli elementi di entrambi i dizionari.
Il problema che sto incontrando è che entrambi i dizionari hanno gli stessi valori chiave. La regola base che voglio è avere una combinazione di entrambi i dizionari e se ci sono chiavi nelle custom_settings che esistono già in default_settings, il valore custom_settings sovrascriverà il valore default_settings. La soluzione migliore che ho è solo un ciclo foreach, controlla se la chiave esiste nell'altro dizionario e, in caso contrario, aggiungila.
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);
}
Ho effettuato alcune query LINQ di base, ma sto ancora lavorando all'apprendimento delle cose più avanzate. Ho visto alcune query che fonderanno 2 dizionari, ma la maggior parte riguarda il raggruppamento di qualsiasi elemento con chiavi duplicate, o restituisce solo una raccolta con solo le chiavi duplicate/Esiste una query o un'espressione LINQ che imiterà il comportamento del ciclo foreach Sto usando?
+1 per il punto # 2 (http://msdn.microsoft.com/en-us/library/k7z0zy8k.aspx) – Brad
+1 per avermi insegnato qualcosa che non sapevo. Sono relativamente autodidatta con C# e non ho mai saputo che potevi farlo con i dizionari. – psubsee2003
@ psubsee2003: Saluti. Sono abbastanza sicuro di aver usato lo stesso schema del tuo codice prima di scoprire che era ridondante (per caso, mi sono trovato in giro con il riflettore). – Ani