Sì, la riflessione sarebbe la strada da percorrere. Innanzitutto, otterrai quello Type
che rappresenta il tipo (in fase di esecuzione) dell'istanza nell'elenco. Puoi farlo chiamando il GetType
metodoObject
. Poiché è nella Object
classe, è richiamabile da ogni oggetto in .NET, poiché tutti i tipi derivano Object
( beh, tecnicamente, non tutto , ma non è importante qui).
Una volta ottenuta l' Type
istanza, è possibile chiamare il GetProperties
metodo per ottenere le PropertyInfo
istanze che rappresentano le informazioni di runtime sulle proprietà sul Type
.
Nota, è possibile utilizzare i sovraccarichi di GetProperties
per aiutare a classificare cui proprietà si recupera.
Da lì, dovresti semplicemente scrivere le informazioni in un file.
Il tuo codice sopra, tradotto, sarebbe:
// 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);
}
Nota che se vuoi informazioni sul metodo o sul campo, dovresti chiamare rispettivamente uno dei sovraccarichi del metodo GetMethods
o GetFields
.
Inoltre, è una cosa elencare i membri in un file, ma non si dovrebbero usare queste informazioni per guidare la logica in base ai set di proprietà.
Supponendo che tu abbia il controllo sulle implementazioni dei tipi, dovresti derivare da una classe base comune o implementare un'interfaccia comune ed effettuare chiamate su quelle (puoi usare l' operatore as
o is
per aiutare a determinare con quale classe base / interfaccia stai lavorando con runtime).
Tuttavia, se non controlli queste definizioni di tipo e devi guidare la logica in base alla corrispondenza dei modelli, allora va bene.