Dynamisches Override von ToString () mit Reflection

8

Im Allgemeinen überschreibe ich die ToString () -Methode, um die Eigenschaftsnamen und die ihnen zugeordneten Werte auszugeben. Ich bin ein bisschen müde davon, diese von Hand zu schreiben, also suche ich nach einer dynamischen Lösung.

Haupt:

%Vor%

TestingClass:

%Vor%

Dies gibt aktuell aus:

%Vor%

Gewünschte Ausgabe:

%Vor%

Ich bin offen für andere Lösungen, es muss keine Reflexion verwenden, es muss nur die gewünschte Ausgabe erzeugen.

    
bizah 15.02.2012, 18:40
quelle

3 Antworten

17

Das funktioniert für mich:

%Vor%

Um es überall verfügbar zu machen, können Sie eine Erweiterung erstellen.
Es ist nicht möglich, Methoden in einer Extension zu überschreiben, aber trotzdem sollte es dein Leben vereinfachen.

%Vor%

Sie können dann ToStringExtension() für jedes Objekt aufrufen.
Nachteil ist, dass es für Listen etc. nicht perfekt funktioniert, Beispiel:

%Vor%     
Simon Woker 15.02.2012, 18:45
quelle
2

Hier ist eine Erweiterung, die die Standardtypen wie string, int und Datetime meldet, aber auch String-Listen (unten in AccessPoints , die die obige Antwort nicht verarbeiten konnte). Beachten Sie, dass die Ausgabe wie folgt ausgerichtet ist:

%Vor%

Unten ist die Erweiterung, die jeden Typ akzeptiert, solange es eine Klasse ist. Es reflektiert dann von den öffentlichen und privaten Eigenschaften und wenn sie nicht null sind, meldet sie.

%Vor%

Verwendung

myInstance.ReportAllProperties()

Beachten Sie, dass dies auf meinem Blog-Artikel basiert C #: ToString, um alle Eigenschaften auch Private über Reflektion zu melden , die eine bereitstellt robustere Erklärung dessen, was vor sich geht.

    
OmegaMan 18.03.2014 18:42
quelle
0

Das ist, was ich gefunden habe, das mit den meisten compicted-Typen (einschließlich Liste) funktioniert:

%Vor%

Verwendung:

%Vor%     
Eyal 02.11.2015 10:58
quelle

Tags und Links