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 GetTypeMethodeObject aufrufen . Da es sich in der ObjectKlasse 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 TypeInstanz haben, können Sie die GetPropertiesMethode aufrufen , um die PropertyInfoInstanzen 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 GetMethodsoder 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 asoder 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.