Als Entwickler schreiben Sie sicher des Öfteren Datenobjekte. Dies sind im Allgemeinen Objekte mit festgelegten Eigenschaften. Sicherlich haben Sie sich dabei auch schon das ein oder andere Mal gewünscht, diese unflexiblen Datenobjekte dynamisch um weitere Eigenschaften ergänzen zu können. In diesem Artikel möchte ich Ihnen zeigen wie Sie sich diesen Wunsch mit Hilfe der ExpandoObject Klasse erfüllen können.
ExpandoObject
Mit Hilfe der ExpandoObject Klasse kann ein Objekt erstellt werden, dessen Eigenschaften bei ihrem ersten Aufruf dynamisch erzeugt werden. Diese Eigenschaften lassen sich danach nutzen. Der folgende Quellcode zeigt ein entsprechendes Beispiel.
1 static void Main(string[] args)
2 {
3 dynamic myObject = new ExpandoObject();
4
5 myObject.FirstName = "John";
6 myObject.LastName = "Doe";
7 myObject.Age = 35;
8
9 Console.WriteLine("{0} {1} is {2} years old",
10 myObject.FirstName, myObject.LastName, myObject.Age);
11
12 Console.ReadKey();
13 }
Es ist dabei auch möglich alle Eigenschaften des Objektes aufzulisten. So können Sie prüfen welchen Inhalt das Objekt bereitstellt. Intern speichert das ExpandoObject alle Eigenschaften in einem Dictionary. Daher wird dieses Dictionary für die Iteration über alle Elemente genutzt.
1 static void Main(string[] args)
2 {
3 dynamic myObject = new ExpandoObject();
4
5 myObject.FirstName = "John";
6 myObject.LastName = "Doe";
7 myObject.Age = 35;
8
9 foreach (var property in (IDictionary<String, Object>)myObject)
10 {
11 Console.WriteLine(property.Key + ": " + property.Value);
12 }
13
14 Console.ReadKey();
15 }
Fazit
Mit einem ExpandoObject lassen sich dynamische Datenklassen erzeugen. In einigen Anwendungsfällen lässt sich dadurch der Programmieraufwand reduzieren, da es nicht mehr nötig ist viele statische Datenklassen zu entwickeln. Ausserdem kann das ExpandoObject in einigen Fällen zu besser lesbarem Quellcode führen. Diese Flexibilität resultiert aber leider in einer eingeschränkten IntelliSense Unterstützung.
Pingback: ExpandoObject to CSV, ExpandoObject to XML | coders corner