Есть ли способ перечислить все переменные (поля) класса в С#.
Если да, то может ли кто-нибудь дать мне несколько примеров, как сохранить их в List
и получить их, возможно, используя Anonymous Types
(var).
Как перечислить все переменные класса
Ответ 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);
}
}