7.8 Anonyme Typen 

In C# können Sie auch ein Objekt erstellen, ohne den Typ explizit anzugeben. Dabei wird eine neue Klasse erstellt – ein sogenannter anonymer Typ:
var obj = new { Name = "Peter", Ort = "Hamburg" };
Die so generierte Klasse hat zwei private Felder und zwei öffentliche Eigenschaftsmethoden, die Name und Ort heißen. Das Objekt der anonymen Klasse wird anschließend einer implizit typisierten Variablen zugewiesen und kann über die Referenz obj abgefragt werden. Wegen der engen Beziehung zwischen var und dem anonymen Typ kann ein anonymer Typ nur lokal in einer Methode und nicht auf Klassenebene erzeugt werden.
Wenn Sie einen weiteren anonymen Typ erzeugen und dabei identisch benannte Parameter angeben, sind beide anonymen Typen typgleich. Allerdings ist dabei nicht nur der Parameterbezeichner ausschlaggebend, sondern darüber hinaus auch die Reihenfolge der Parameter. Im folgenden Codefragment sind die beiden Referenzen obj1 und obj2 typgleich; obj3 weist bei der Initialisierung jedoch eine andere Reihenfolge auf und wird daher als neuer anonymer Typ bewertet.
var obj1 = new { Name = "Peter", Ort = "Hamburg" }; var obj2 = new { Name = "Uwe", Ort = "München" }; var obj3 = new { Ort = "Berlin", Name = "Hans" };
Sie können sich das bestätigen lassen, indem Sie die von Object geerbte Methode GetType aufrufen:
Console.WriteLine(obj1.GetType()); Console.WriteLine(obj2.GetType()); Console.WriteLine(obj3.GetType());
Die Ausgabe wird wie folgt lauten:
<>f__AnonymousType0’2[System.String,System.String] <>f__AnonymousType0’2[System.String,System.String] <>f__AnonymousType1’2[System.String,System.String]