web-dev-qa-db-fra.com

Comment lister toutes les variables de classe

Existe-t-il un moyen de répertorier toutes les variables (champs) d'une classe en C # . Si oui, quelqu'un pourrait-il me donner quelques exemples pour les enregistrer dans une variable List et les obtenir éventuellement à l'aide de Anonymous Types (var).

18
Burimi

Votre question n'est pas parfaitement claire. On dirait que vous voulez 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 est List<object>. Ici, foo est une instance existante de votre classe.

Si vous voulez des champs public et non -public, vous devez modifier les indicateurs de liaison via

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.

40
jason

Ceci listera les noms de tous les champs d'une classe (publics et non publics, champs 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 souhaitez plutôt que les champs soient basés sur une instance d'objet, utilisez plutôt GetType:

foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags))
{
    Console.WriteLine(field.Name);
}
9
Fredrik Mörk
myClass.GetType().GetProperties()
3
MrFox
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();
2
AJ.

Pas vraiment 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);
    }
}
1
Graham Laight