Als ich wieder mal die ToString() Methode für ein Objekt überladen habe, um die Eigenschaften eines Objekts schön formatiert auszugeben, habe ich mich gefragt, ob es vielleicht sinnvoller ist, die Eigenschaften über Reflection zu suchen, statt die Eigenschaften manuell zusammenzuschreiben. Das hat den Vorteil, dass man keine Eigenschaft vergisst, wenn man das Objekt später mal erweitern sollte.
Also habe ich Google um Rat gefragt und einer der ersten Suchtreffer war bei StackOverflow, seit einigen Jahren meine bevorzugte Quelle für Code-Snippets.
Den dort vorgefundenen Code habe ich mal für ein Beispiel für den beschriebenen Anwendungsfall adaptiert:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
internal class Person { string telefon; public string Name { get; internal set; } public string Plz { get; internal set; } public string Stadt { get; internal set; } public string Strasse { get; internal set; } public string Vorname { get; internal set; } public override string ToString() { StringBuilder data = new StringBuilder(); Type type = typeof(Person); foreach (PropertyInfo prop in type.GetProperties()) { data.AppendFormat("{0}:{1}\n", prop.Name, prop.GetValue(this)); } return data.ToString(); } } |
Das Ergebnis sieht so aus:
Name:Semmler
Plz:55435
Stadt:Gau-Algesheim
Strasse:Rheinstraße 40
Vorname:Patrick