Tak, Refleksja byłaby właściwą drogą. Po pierwsze, otrzymasz, Typektóry reprezentuje typ (w czasie wykonywania) instancji na liście. Możesz to zrobić, wywołując GetTypemetodęObject . Ponieważ znajduje się w Objectklasie, jest wywoływany przez każdy obiekt w .NET, ponieważ wszystkie typy pochodzą z Object( no, technicznie nie wszystko , ale to nie jest ważne).
Gdy masz już Typeinstancję, możesz wywołać GetPropertiesmetodę, aby uzyskać PropertyInfoinstancje, które reprezentują informacje w czasie wykonywania o właściwościach w Type.
Uwaga, można skorzystać z przeciążeniem GetPropertiesułatwia klasyfikowanie której właściwości mają odzyskać.
Stamtąd po prostu zapisujesz informacje do pliku.
Twój powyższy kod, przetłumaczony, wyglądałby tak:
// 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);
}
Zauważ, że jeśli chcesz uzyskać informacje metoda lub informacji pole, trzeba by zadzwonić do jednego z tych przeciążeń GetMethodslub GetFieldsmetod odpowiednio.
Zauważ też, że jedną rzeczą jest wyszczególnienie członków pliku, ale nie powinieneś używać tych informacji do sterowania logiką opartą na zestawach właściwości.
Zakładając, że masz kontrolę nad implementacjami typów, powinieneś wyprowadzić ze wspólnej klasy bazowej lub zaimplementować wspólny interfejs i wykonać na nich wywołania (możesz użyć operatora aslub is, aby pomóc określić, z którą klasą bazową / interfejsem pracujesz runtime).
Jeśli jednak nie kontrolujesz tych definicji typów i musisz sterować logiką opartą na dopasowywaniu wzorców, to jest w porządku.