var obj = new Dictionary<string, object>;
...
Console.WriteLine(obj["MyString"]);
Ich denke, das funktioniert nur, weil alles eine ToString() hat, sonst müsste man den Typ kennen, der es war, und das "Objekt" auf diesen Typ übertragen.
Einige davon sind häufiger nützlich als andere, ich versuche, gründlich zu sein.
-
Es ist vielleicht viel natürlicher, auf eine Sammlung, in diesem Fall ein "Wörterbuch", mit der direkteren Punktnotation zuzugreifen.
-
Es scheint, als ob dies als ein wirklich schönes Tupel verwendet werden könnte. Sie können immer noch Ihre Mitglieder "Item1", "Item2" usw. nennen... aber jetzt müssen Sie nicht, es ist auch veränderbar, im Gegensatz zu einem Tuple. Dies hat den großen Nachteil der Mangel an Intellisense-Unterstützung.
-
Sie mögen sich mit "Mitgliedsnamen als Zeichenketten" unwohl fühlen, so wie es sich mit dem Wörterbuch anfühlt, Sie mögen es als zu ähnlich empfinden wie das "Ausführen von Zeichenketten", und es kann dazu führen, dass Namenskonventionen einkodiert werden und man mit Morphemen und Silben arbeiten muss, wenn der Code versucht zu verstehen, wie man die Mitglieder verwendet :-P
-
Kann man einem ExpandoObject selbst einen Wert zuweisen oder nur seinen Membern? Vergleichen und kontrastieren Sie mit dynamic/dynamic[], verwenden Sie das, was Ihren Bedürfnissen am besten entspricht.
-
Ich glaube nicht, dass dynamic/dynamic[] in einer foreach-Schleife funktioniert, Sie müssen var verwenden, aber möglicherweise können Sie ExpandoObject verwenden.
-
Sie können dynamic nicht als Datenelement in einer Klasse verwenden, vielleicht weil es zumindest eine Art Schlüsselwort ist, hoffentlich können Sie es mit ExpandoObject.
-
Ich nehme an, es "ist" ein ExpandoObject, könnte nützlich sein, um sehr generische Dinge auseinander zu kennzeichnen, mit Code, der auf der Grundlage von Typen unterscheidet, wo es viel dynamisches Zeug verwendet wird.
Es wäre schön, wenn Sie mehrere Ebenen auf einmal aufschlüsseln könnten.
var e = new ExpandoObject();
e.position.x = 5;
etc...
Das ist nicht das bestmögliche Beispiel, stellen Sie sich elegante Verwendungen in Ihren eigenen Projekten vor.
Es ist eine Schande, dass man einige davon nicht mit Code erstellen und die Ergebnisse an Intellisense übergeben kann. Ich bin mir aber nicht sicher, wie das funktionieren würde.
Es wäre schön, wenn sie neben den Mitgliedern auch einen Wert haben könnten.
var fifteen = new ExpandoObject();
fifteen = 15;
fifteen.tens = 1;
fifteen.units = 5;
fifteen.ToString() = "fifteen";
etc...