Oui, la réflexion serait la voie à suivre. Tout d'abord, vous obtiendrez le Type
qui représente le type (au moment de l'exécution) de l'instance dans la liste. Vous pouvez le faire en appelant la GetType
méthode surObject
. Comme il se trouve sur la Object
classe, il peut être appelé par chaque objet de .NET, car tous les types dérivent Object
( enfin, techniquement, pas tout , mais ce n'est pas important ici).
Une fois que vous avez l' Type
instance, vous pouvez appeler la GetProperties
méthode pour obtenir les PropertyInfo
instances qui représentent les informations d'exécutiona sur les propriétés sur le Type
.
Notez que vous pouvez utiliser les surcharges de GetProperties
pour classer qui propriétés que vous récupérez.
À partir de là, vous écririez simplement les informations dans un fichier.
Votre code ci-dessus, traduit, serait:
// 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);
}
Notez que si vous voulez des informations de méthode ou des informations de champ, vous devrez appeler l'une des surcharges des méthodes GetMethods
ou GetFields
respectivement.
Notez également que lister les membres d'un fichier est une chose, mais vous ne devez pas utiliser ces informations pour piloter la logique en fonction des ensembles de propriétés.
En supposant que vous ayez le contrôle sur les implémentations des types, vous devez dériver d'une classe de base commune ou implémenter une interface commune et faire les appels sur celles-ci (vous pouvez utiliser l' opérateur as
ou is
pour déterminer avec quelle classe / interface de base vous travaillez) Durée).
Cependant, si vous ne contrôlez pas ces définitions de type et que vous devez piloter la logique en fonction de la correspondance de modèles, c'est très bien.