Подтвердить что ты не робот

Как перечислить все переменные класса

Есть ли способ перечислить все переменные (поля) класса в С#. Если да, то может ли кто-нибудь дать мне несколько примеров, как сохранить их в List и получить их, возможно, используя Anonymous Types (var).

4b9b3361

Ответ 1

Ваш вопрос не совсем ясен. Похоже, вы хотите, чтобы значения полей для данного экземпляра вашего класса:

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

Обратите внимание, что fieldValues - List<object>. Здесь foo - это существующий экземпляр вашего класса.

Если вы хотите поля public и не public, вам необходимо изменить флаги привязки с помощью

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

Если вам просто нужны имена:

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

Здесь foo - это имя вашего класса.

Ответ 2

Здесь будут перечислены имена всех полей в классе (как открытых, так и непубличных, как статических, так и полей экземпляров):

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

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

Если вы хотите получить поля на основе экземпляра объекта, вместо этого используйте GetType:

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

Ответ 3

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

Ответ 4

myClass.GetType().GetProperties()

Ответ 5

Не совсем заданный вопрос - но вот как получить значения всех свойств типа Decimal от объекта, называемого "inv":

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

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