Tak, Refleksja byłaby właściwą drogą. Po pierwsze, otrzymasz, Type
który reprezentuje typ (w czasie wykonywania) instancji na liście. Możesz to zrobić, wywołując GetType
metodęObject
. Ponieważ znajduje się w Object
klasie, 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ż Type
instancję, możesz wywołać GetProperties
metodę, aby uzyskać PropertyInfo
instancje, które reprezentują informacje w czasie wykonywania o właściwościach w Type
.
Uwaga, można skorzystać z przeciążeniem GetProperties
uł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ń GetMethods
lub GetFields
metod 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 as
lub 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.