2016-06-06 13 views
3

Ich versuche, eine Liste von Wörterbüchern als Wert eines anderen Wörterbuchs zu erstellen.Wie kann ich eine Liste von Wörterbüchern als Wert eines anderen Wörterbuchs erstellen?

Ich mag im Grunde Daten speichern, wie dies

userPrivileges ["foo"]["a"] = 4; 
userPrivileges ["foo"]["b"] = 8; 
userPrivileges ["foo"]["c"] = 16; 
userPrivileges ["bar"]["a"] = 4; 

Hier ist, was ich versuchte

Dictionary<string, List<Dictionary<string, int>>> userPrivileges = new Dictionary<string, List<Dictionary<string, int>>>(); 

Um einen Schlüssel in der Wörterbuchliste hinzufügen oder aktualisieren wir die folgende Methode verwenden

protected void AddOrUpdateUserPrivilege(string moduleName, string key, int value) 
{ 
    if (!this.userPrivileges.ContainsKey(moduleName)) 
    { 
     var entry = new Dictionary<string, int>(key, value); 

     this.userPrivileges.Add(moduleName, entry); 
    } 
    else 
    { 
     this.userPrivileges[moduleName][key] |= value; 
    } 

} 

Hier ist ein Screenshot der Syntaxfehler enter image description here

Wie kann ich einen neuen Eintrag zum Hauptverzeichnis hinzufügen? und wie kann ich auf den Wert eines Wörterbuchs in der Liste zugreifen/aktualisieren?

Antwort

2

Wörterbücher haben keinen Konstruktor zum Einfügen von Elementen. Sie können die Auflistungsinitialisierer Syntax:

var entry = new Dictionary<string, int> 
{ 
    { key, value } 
}; 

Ihre anderen Fragen Linie nicht mit der Tatsache, dass Sie eine Dictionary<string, List<Dictionary<string, int>>> haben, weil Sie es als Dictionary<string, Dictionary<string, int>> verwenden.

Da Ihr Code Sinn wie diese zu machen scheint, würde ich Ihre Definition empfiehlt sich zu ändern:

Dictionary<string, Dictionary<string, int>> userPrivileges = new Dictionary<string, Dictionary<string, int>>(); 
+0

Vielen Dank für Ihre Hilfe bei diesem. Nach der Aktualisierung des Codes mit Ihrem Vorschlag wurden die Syntaxfehler anders gelöst. Aber wenn ich es ausführe, erhalte ich den folgenden Fehler: Eine Ausnahme des Typs 'System.Collections.Generic.KeyNotFoundException' ist in mscorlib.dll aufgetreten, wurde aber nicht im Benutzercode behandelt. Zusätzliche Informationen: Der angegebene Schlüssel war nicht im Wörterbuch vorhanden . 'Der Fehler zeigt auf diese Zeile' this.userPrivileges [ModulName] [Schlüssel] | = Wert; ' –

+1

@MikeA Das passiert, weil' Schlüssel' in Ihrem Wörterbuch nicht existiert. Sie müssen auch überprüfen, ob 'if (userPrivileges [moduleName] .ContainsKey (key)) ' – Rob

+0

Richtig! Vielen Dank für Ihre Hilfe :) –

Verwandte Themen