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).
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.
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);
}
myClass.GetType().GetProperties()
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();
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);
}
}