it-swarm.com.de

So listen Sie alle Variablen der Klasse auf

Gibt es eine Möglichkeit, alle Variablen (Felder) einer Klasse in C # ..__ aufzulisten. Wenn ja, könnte mir jemand einige Beispiele geben, wie man sie in einer List speichert und sie mit Anonymous Types (var) erhält.

18
Burimi

Ihre Frage ist nicht völlig klar. Es klingt, als wollten Sie die Werte der Felder für eine bestimmte Instanz Ihrer Klasse:

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

Beachten Sie, dass fieldValuesList<object> ist. Hier ist foo eine vorhandene Instanz Ihrer Klasse.

Wenn Sie public und nicht -public Felder möchten, müssen Sie die Bindungsflags über ändern

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

Wenn Sie nur die Namen wollen:

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

Hier ist Foo der Name Ihrer Klasse.

40
jason

Hier werden die Namen aller Felder in einer Klasse aufgelistet (sowohl öffentliche als auch nicht öffentliche, sowohl statische als auch Instanzfelder):

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

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

Wenn Sie stattdessen die Felder basierend auf einer Objektinstanz abrufen möchten, verwenden Sie stattdessen 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.

Nicht ganz die gestellte Frage - aber wie Sie die Werte aller Eigenschaften vom Typ Decimal von einem Objekt namens "inv" erhalten:

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