Kann eine Klasseneigenschaft / ein Feld in C # 4.0 vom anonymen Typ sein?

8

Wie in:

%Vor%

Hinweis: Das obige kompiliert nicht und funktioniert nicht (die Var kann dort nicht verwendet werden), es ist nur um meinen Punkt zu zeigen.

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

zu verwenden %Vor%

und das funktioniert, aber es erzeugt wegen der dynamischen Typisierung kein Intellisense. Ich bin mir bewusst, dass das anonyme Tippen nur ein Compiler-Trick ist, also hoffte ich, dass ich diesen Trick zu meinem Vorteil nutzen konnte, indem ich ein strukturiertes Feld deklarierte, ohne vorher eine Klasse deklarieren zu müssen (hauptsächlich, weil es nur eine Instanz dieser besonderen Art geben wird) Feld). Ich kann jetzt sehen, dass es 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 generiert, sollte es ziemlich einfach sein, dass der Compiler diesen impliziten Typ für ein Feld generiert.

    
Diego 20.10.2010, 20:53
quelle

6 Antworten

5

Nein, jedes Mitglied sollte stark typisiert sein.

Sie könnten sich für einen dynamischen Typ entscheiden, um Ihrem Mitglied eine Chance zu geben, zur Laufzeit evaluiert zu werden.

Bearbeiten: Mitglieder sollten explizit eingegeben werden.

    
abhishek 20.10.2010, 20:56
quelle
10

Es hört sich so an, als könnten Sie eine oder zwei Fragen stellen, also werde ich versuchen, beide anzusprechen.

Kann ein Klassenfeld stark in einen anonymen Typ eingetippt werden

Nein. Anonyme Typnamen können nicht in C # -Code angegeben werden (daher anonym). Die einzige Möglichkeit, sie statisch einzugeben, ist

  1. Generischer Inferenztyp
  2. Verwendung des var -Schlüssels

Keine davon ist auf das Feld eines Typs anwendbar.

Kann ein Klassenfeld mit einem anonymen Typ-Ausdruck initialisiert werden?

Ja. Das Feld muss nur zu einem Typ deklariert werden, der mit anonymen Typen kompatibel ist: object zum Beispiel

%Vor%     
JaredPar 20.10.2010 20:55
quelle
2

Wenn dies C # 4 ist, sehen Sie sich das dynamische Schlüsselwort an.

%Vor%

Sobald Sie dies tun, verlieren Sie jedoch jegliche Art von Sicherheitsprüfungen und praktische Compiler-Prüfungen.

    
Joshua Rodgers 20.10.2010 21:00
quelle
2

Wie wäre es stattdessen mit Tuple<string, string> ?

%Vor%     
Dr. Wily's Apprentice 20.10.2010 21:06
quelle
1

Eine Eigenschaft (oder ein Feld) von einer benannten Klasse kann keinen anonymen Typ haben, da auf einen solchen Typ im Code nicht verwiesen werden kann. Jedoch kann ein anonymer Typ Eigenschaften des anonymen Typs enthalten:

%Vor%

Aber solch ein Konstrukt hat keinen praktischen Nutzen außerhalb des lokalen Geltungsbereichs ...

    
Thomas Levesque 20.10.2010 21:07
quelle
0

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

    
Adam Robinson 20.10.2010 20:56
quelle

Tags und Links