Ja, Reflexion wäre der richtige Weg. Zunächst erhalten Sie die Type
, die den Typ (zur Laufzeit) der Instanz in der Liste darstellt. Sie können dies tun, indem Sie die GetType
MethodeObject
aufrufen . Da es sich in der Object
Klasse befindet, kann es von jedem Objekt in .NET aufgerufen werden, da alle Typen davon abgeleitet sind Object
( technisch gesehen nicht alles , aber das ist hier nicht wichtig).
Sobald Sie die Type
Instanz haben, können Sie die GetProperties
Methode aufrufen , um die PropertyInfo
Instanzen abzurufen, die die Laufzeitinformationen zu den Eigenschaften auf der darstellen Type
.
Beachten Sie, dass Sie die Überladungen von verwenden können GetProperties
, um zu klassifizieren, welche Eigenschaften Sie abrufen.
Von dort aus schreiben Sie die Informationen einfach in eine Datei.
Ihr Code oben, übersetzt, wäre:
// The instance, it can be of any type.
object o = <some object>;
// Get the type.
Type type = o.GetType();
// Get all public instance properties.
// Use the override if you want to classify
// which properties to return.
foreach (PropertyInfo info in type.GetProperties())
{
// Do something with the property info.
DoSomething(info);
}
Beachten Sie, dass Sie, wenn Sie Methoden- oder Feldinformationen wünschen, eine der Überladungen der Methoden GetMethods
oder aufrufen müssen GetFields
.
Beachten Sie auch, dass es eine Sache ist, die Mitglieder in einer Datei aufzulisten, aber Sie sollten diese Informationen nicht verwenden, um die Logik basierend auf Eigenschaftssätzen zu steuern.
Angenommen, Sie haben die Kontrolle über die Implementierungen der Typen, sollten Sie von einer gemeinsamen Basisklasse ableiten oder eine gemeinsame Schnittstelle implementieren und diese aufrufen (Sie können den Operator as
oder verwenden is
, um zu bestimmen, mit welcher Basisklasse / Schnittstelle Sie arbeiten Laufzeit).
Wenn Sie diese Typdefinitionen jedoch nicht steuern und die Logik basierend auf dem Mustervergleich steuern müssen, ist dies in Ordnung.