45 votes

Comment lister toutes les variables d'une classe

Existe-t-il un moyen de lister toutes les variables (champs) d'une classe en C#. Si oui, quelqu'un peut-il me donner des exemples pour les sauvegarder dans un fichier de type List et les obtenir peut-être en utilisant Anonymous Types (var).

76voto

Jason Points 125291

Votre question n'est pas parfaitement claire. Il semble que vous vouliez les valeurs des champs pour une instance donnée de votre classe :

var fieldValues = foo.GetType()
                     .GetFields()
                     .Select(field => field.GetValue(foo))
                     .ToList();

Notez que fieldValues es List<object> . Ici, foo est une instance existante de votre classe.

Si vous voulez public et non public vous devez modifier les drapeaux de liaison par le biais de l'option

var bindingFlags = BindingFlags.Instance |
                   BindingFlags.NonPublic |
                   BindingFlags.Public;
var fieldValues = foo.GetType()
                     .GetFields(bindingFlags)
                     .Select(field => field.GetValue(foo))
                     .ToList();

Si vous voulez simplement les noms :

var fieldNames = typeof(Foo).GetFields()
                            .Select(field => field.Name)
                            .ToList();

Ici, Foo est le nom de votre classe.

15voto

Fredrik Mörk Points 85694

Cette fonction énumère les noms de tous les champs d'une classe (publics et non publics, statiques et d'instance) :

BindingFlags bindingFlags = BindingFlags.Public |
                            BindingFlags.NonPublic |
                            BindingFlags.Instance |
                            BindingFlags.Static;

foreach (FieldInfo field in typeof(TheClass).GetFields(bindingFlags))
{
    Console.WriteLine(field.Name);
}

Si vous voulez obtenir les champs en fonction d'une instance d'objet à la place, utilisez GetType à la place :

foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags))
{
    Console.WriteLine(field.Name);
}

7voto

MrFox Points 1492
myClass.GetType().GetProperties()

4voto

AJ. Points 6588
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();

2voto

Graham Laight Points 321

Ce n'est pas tout à fait la question posée - mais voici comment obtenir les valeurs de toutes les propriétés de type Decimal à partir d'un objet appelé "inv" :

var properties = inv.GetType().GetProperties();

foreach (var prop in properties)
{
    if (prop.ToString().ToLower().Contains("decimal"))
    {
        totalDecimal += (Decimal)prop.GetValue(inv, null);
    }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X