10 Stimmen

Kann eine Klasse Eigenschaft/Feld von anonymen Typ in C# 4.0 sein?

Wie in:

public class MyClass {

  private static var MyProp = new {item1 = "a", item2 = "b"};

}

Hinweis: Das obige Beispiel lässt sich nicht kompilieren und funktioniert auch nicht (die var kann dort nicht verwendet werden), es soll nur meinen Standpunkt verdeutlichen.

Update : Nur um die Frage zu klären, ich hatte bereits versucht, mit

private static dynamic MyProp = new {item1 = "a", item2 = "b"};

und das funktioniert, aber es erzeugt keine Intellisense wegen der dynamischen Typisierung. Ich bin mir bewusst, dass die anonyme Typisierung nur ein Compiler-Trick ist, also hoffte ich, diesen Trick zu meinem Vorteil nutzen zu können, indem ich ein strukturiertes Feld deklariere, ohne vorher eine Klasse deklarieren zu müssen (hauptsächlich, weil es nur eine Instanz dieser speziellen Art von Feld geben wird). Jetzt sehe ich, dass das nicht möglich ist, aber ich bin mir nicht sicher, warum das so ist. Wenn der Compiler einfach einen impliziten Typ für ein anonymes Objekt erzeugt, sollte es ziemlich einfach sein, den Compiler diesen impliziten Typ für ein Feld erzeugen zu lassen.

1voto

Thomas Levesque Punkte 277723

Eine Eigenschaft (oder ein Feld) von eine benannte Klasse kann keinen anonymen Typ haben, weil auf einen solchen Typ im Code nicht verwiesen werden kann. Allerdings ein anonymer Typ puede enthalten Eigenschaften vom anonymen Typ:

var myObj = new
{
    Foo = new { Name = "Joe", Age = 20 }
};

Aber ein solches Konstrukt hat keinen praktischen Nutzen außerhalb des lokalen Rahmens...

0voto

Adam Robinson Punkte 176996

Nein, anonyme Typen können außerhalb ihrer deklarierenden Funktion nicht als etwas anderes als object . Während der anonyme Typ nur ein syntaktischer Zucker ist und tatsächlich einen konkreten Typ erzeugt, ist dieser Typ dem Entwickler niemals bekannt (noch verfügbar) und kann daher nicht verwendet werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X