nachzuahmen Gibt es eine gute Möglichkeit, in C# die folgende Python-Syntax zu imitieren:C# Art und Weise Python Dictionary Syntax
mydict = {}
mydict["bc"] = {}
mydict["bc"]["de"] = "123"; # <-- This line
mydict["te"] = "5"; # <-- While also allowing this line
Mit anderen Worten, ich möchte etwas mit [] Stil Zugang, die entweder eine andere zurückkehren Wörterbuch oder ein String-Typ, abhängig davon, wie es eingestellt wurde.
Ich habe versucht, dies mit einer benutzerdefinierten Klasse auszuarbeiten, kann aber nicht erfolgreich sein. Irgendwelche Ideen?
Danke!
Edit: Ich bin böse, ich weiß. Jared Pars Lösung ist großartig. . . für ein 2-Level-Wörterbuch dieser Form. Ich bin aber auch neugierig auf weitere Ebenen. . . zum Beispiel
mydict["bc"]["df"]["ic"] = "32";
Und so weiter. Irgendwelche Ideen dazu?
bearbeitet 3:
Hier ist die letzte Klasse I am Ende mit:
class PythonDict {
/* Public properties and conversions */
public PythonDict this[String index] {
get {
return this.dict_[index];
}
set {
this.dict_[index] = value;
}
}
public static implicit operator PythonDict(String value) {
return new PythonDict(value);
}
public static implicit operator String(PythonDict value) {
return value.str_;
}
/* Public methods */
public PythonDict() {
this.dict_ = new Dictionary<String, PythonDict>();
}
public PythonDict(String value) {
this.str_ = value;
}
public bool isString() {
return (this.str_ != null);
}
/* Private fields */
Dictionary<String, PythonDict> dict_ = null;
String str_ = null;
}
Diese Klasse für endlose Ebene funktioniert, und kann von ohne explizite Konvertierung (gefährlich, vielleicht gelesen, aber hey).
Verwendung wie folgt:
PythonDict s = new PythonDict();
s["Hello"] = new PythonDict();
s["Hello"]["32"] = "hey there";
s["Hello"]["34"] = new PythonDict();
s["Hello"]["34"]["Section"] = "Your face";
String result = s["Hello"]["34"]["Section"];
s["Hi there"] = "hey";
Vielen Dank Jared Par!
Sehr schön gemacht. Ich hasse diese impliziten Conversions, aber Sie können das tun, was das OP will. –
Große Lösung für 1 oder 2 Schlüssel. . . Ich mag es dafür, und es würde wahrscheinlich in meinem Fall funktionieren (also vielen Dank!). Ich bin aber auch neugierig auf tiefere Wörterbücher. Irgendwelche Ideen da? –
Yup, es war sehr erweiterbar. Die resultierende Klasse wird in Frage angezeigt. Vielen Dank! –