有没有办法在C#中列出类的所有变量(字段)。
如果是,那么有人可以给我一些例子如何将它们保存在List
中并使用Anonymous Types
(var)来获取它们。
答案 0 :(得分:43)
你的问题不是很清楚。听起来你想要类的给定实例的字段值:
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
是您班级的名称。
答案 1 :(得分:9)
这将列出类中所有字段的名称(公共和非公共字段,包括静态字段和实例字段):
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);
}
答案 2 :(得分:3)
var fields = whateverYourClassType.GetType().GetFields().Select(f => f.Name).ToList();
答案 3 :(得分:3)
myClass.GetType().GetProperties()
答案 4 :(得分:1)
不是问的问题 - 但是这里是如何从名为&#34; inv&#34;的对象中获取Decimal类型的所有属性的值:
var properties = inv.GetType().GetProperties();
foreach (var prop in properties)
{
if (prop.ToString().ToLower().Contains("decimal"))
{
totalDecimal += (Decimal)prop.GetValue(inv, null);
}
}