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).
Réponses
Trop de publicités?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.
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);
}
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);
}
}