Как перечислить все переменные класса - PullRequest
21 голосов
/ 30 июня 2011

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

Ответы [ 5 ]

46 голосов
/ 30 июня 2011

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

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 - это имя вашего класса.

10 голосов
/ 30 июня 2011

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

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 голосов
/ 30 июня 2011
myClass.GetType().GetProperties()
3 голосов
/ 30 июня 2011
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();
1 голос
/ 06 сентября 2017

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

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

foreach (var prop in properties)
{
    if (prop.ToString().ToLower().Contains("decimal"))
    {
        totalDecimal += (Decimal)prop.GetValue(inv, null);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...