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?
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.
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.
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."
Tags und Links c# anonymous-types