ist die Reihenfolge der Felder bei der automatischen Initialisierung der anonymen Typen wichtig?

8

Ich habe ein Szenario, um die anonyme Liste aus den anonymen Typen zu erstellen, und das habe ich mit

erreicht %Vor%

Dies sind die Fehlermeldungen

  

System.Collections.Generic.List.Add (AnonymitätsTyp # 1) '   hat einige ungültige Argumente

     

Argument   '1': kann nicht konvertieren von   'AnonymousType # 2' zu 'AnonymType # 1'

Was ist der Grund dafür?

    
RameshVel 28.01.2010, 12:22
quelle

3 Antworten

9

Ja, das ist wichtig.

Zwei anonyme Typinitialisierer verwenden den gleichen automatisch generierten Typ, wenn die Eigenschaftsnamen und -typen in derselben Reihenfolge identisch sind.

Die Reihenfolge wird beim Hashing relevant; es wäre möglich gewesen, dass der Typ mit einer konsistenten Reihenfolge zur Berechnung eines Hash-Werts erzeugt wird, aber es scheint einfacher zu sein, die Eigenschaftsreihenfolge als Teil dessen einzubeziehen, was einen Typ einzigartig macht.

Siehe Abschnitt 7.5.10.6 der Spezifikation C # 3 für Details. Insbesondere:

  

Im selben Programm zwei anonyme   Objektinitialisierer, die a angeben   Reihenfolge der Eigenschaften derselben   Namen und Kompilierzeittypen in der   Die gleiche Reihenfolge erzeugt Instanzen von   derselbe anonyme Typ.

    
Jon Skeet 28.01.2010, 12:24
quelle
5
  

Was ist der Grund dafür?

Angenommen, diese Reihenfolge ist egal. Angenommen, Sie waren im Compiler-Team. Beschreibe für mich das genaue Verhalten einer Implementierung von "ToString" an einem solchen anonymen Typ, so dass die Implementierung alle Benutzererwartungen erfüllt.

Ich persönlich kann mir keine vorstellen, aber vielleicht kannst du es.

    
Eric Lippert 28.01.2010 15:40
quelle
3

Ja, die Reihenfolge der Felder ist signifikant. Gleiche Felder, unterschiedliche Reihenfolge ergeben unterschiedliche Typen.

Aus der Sprachspezifikation:

  

"Innerhalb desselben Programms werden zwei anonyme Objektinitialisierer, die eine Folge von Eigenschaften mit denselben Namen und Kompilierungszeittypen in der gleichen Reihenfolge angeben, Instanzen desselben anonymen Typs erzeugen."

    
Brian Rasmussen 28.01.2010 12:24
quelle

Tags und Links