如何列出所有类的变量

时间:2011-06-30 14:14:21

标签: c# reflection

有没有办法在C#中列出类的所有变量(字段)。 如果是,那么有人可以给我一些例子如何将它们保存在List中并使用Anonymous Types(var)来获取它们。

5 个答案:

答案 0 :(得分:43)

你的问题不是很清楚。听起来你想要类的给定实例的字段值:

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

请注意,fieldValuesList<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);
    }
}