Czy istnieje dobry sposób w C#, aby naśladować następujące python składni:C# sposób naśladować Python słownik Składnia
mydict = {}
mydict["bc"] = {}
mydict["bc"]["de"] = "123"; # <-- This line
mydict["te"] = "5"; # <-- While also allowing this line
Innymi słowy, chciałbym coś z [] Dostęp do stylu, który może powrócić albo inny słownik lub typ łańcucha, w zależności od tego, jak został ustawiony.
Próbowałem rozwiązać ten problem za pomocą niestandardowej klasy, ale nie wydaje się, aby odnieść sukces. Jakieś pomysły?
Dzięki!
Edytuj: Jestem zły, wiem. Rozwiązanie Jareda Par jest świetne. . . dla 2-poziomowego słownika tego formularza. Jednak jestem też ciekawy dalszych poziomów. . . na przykład:
mydict["bc"]["df"]["ic"] = "32";
I tak dalej. Jakieś pomysły na ten temat?
Edit 3:
Oto końcowy klasa I skończył przy użyciu:
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;
}
Klasa ta działa dla nieskończonych szczeblach, i mogą być odczytywane z bez wyraźnej konwersji (niebezpieczny, może, ale hej).
Wykorzystanie tak:
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";
Dziękuję bardzo Jared Par!
Bardzo ładnie wykonane. Nienawidzę tych niejawnych konwersji, ale z pewnością pozwala to robić to, co chce OP. –
Doskonałe rozwiązanie dla 1 lub 2 kluczy. . . Podoba mi się to i prawdopodobnie zadziała w moim przypadku (bardzo dziękuję!). Jednak jestem też ciekawy głębszych słowników. Jakieś pomysły? –
Tak, to było bardzo rozszerzalne. Wynikowa klasa jest pokazana w pytaniu. Dziękuję Ci bardzo! –