Depuis le monde de PHP, j'ai décidé d'essayer C #. J'ai eu une recherche mais je n'arrive pas à trouver la réponse sur la façon de faire l'équivalent de cela.
$object = new Object();
$vars = get_class_vars(get_class($object));
foreach($vars as $var)
{
doSomething($object->$var);
}
J'ai essentiellement une liste d'un objet. L'objet peut être l'un des trois types différents et aura un ensemble de propriétés publiques. Je veux pouvoir obtenir une liste des propriétés de l'objet, les parcourir en boucle et les écrire dans un fichier. Je pense que cela a quelque chose à voir avec la réflexion c # mais c'est tout nouveau pour moi.
Toute aide serait grandement appréciée.
c#
reflection
m4rc
la source
la source
Réponses:
Cela devrait le faire:
la source
System.Reflection
namespacePropertyInfo[] props = input.GetType().GetProperties();
Newtonsoft.Json.JsonConvert
?la source
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 laGetType
méthode surObject
. Comme il se trouve sur laObject
classe, il peut être appelé par chaque objet de .NET, car tous les types dériventObject
( enfin, techniquement, pas tout , mais ce n'est pas important ici).Une fois que vous avez l'
Type
instance, vous pouvez appeler laGetProperties
méthode pour obtenir lesPropertyInfo
instances qui représentent les informations d'exécutiona sur les propriétés sur leType
.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:
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
ouGetFields
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
ouis
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.
la source
eh bien, en C #, c'est similaire. Voici l'un des exemples les plus simples (uniquement pour les propriétés publiques):
la source
Pour obtenir une valeur de propriété spécifique à partir du nom de propriété
pour accéder à la valeur de propriété de Name à partir de la chaîne nom de propriété
la source
Vous pouvez utiliser GetType - GetProperties - Linq Foreach :
la source
Solution en une ligne utilisant Linq ...
la source
Voici quelque chose que j'utilise pour transformer un
IEnumerable<T>
en unDataTable
qui contient des colonnes représentantT
les propriétés de, avec une ligne pour chaque élément dansIEnumerable
:C'est "un peu" trop compliqué, mais c'est en fait assez bon pour voir quel est le résultat, comme vous pouvez lui donner un
List<T>
de, par exemple:Et vous recevrez un DataTable avec la structure:
Avec une ligne par élément dans votre
List<Car>
la source
Cet exemple supprime toutes les propriétés de chaîne d'un objet.
la source
Je n'ai pas trouvé cela sur lequel travailler, disons les objets Application. J'ai cependant eu du succès avec
la source
la source
la source
Vous pouvez essayer ceci:
Une fois que chaque tableau implémente l'interface IEnumerable
la source