如何列出所有类的变量

Bur*_*imi 27 c# reflection

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

jas*_*son 52

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

var fieldValues = foo.GetType()
                     .GetFields()
                     .Select(field => field.GetValue(foo))
                     .ToList();
Run Code Online (Sandbox Code Playgroud)

需要注意的是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();
Run Code Online (Sandbox Code Playgroud)

如果你只想要这些名字:

var fieldNames = typeof(Foo).GetFields()
                            .Select(field => field.Name)
                            .ToList();
Run Code Online (Sandbox Code Playgroud)

Foo是您班级的名称.


Fre*_*örk 10

这将列出类中所有字段的名称(公共和非公共字段,包括静态字段和实例字段):

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

foreach (FieldInfo field in typeof(TheClass).GetFields(bindingFlags))
{
    Console.WriteLine(field.Name);
}
Run Code Online (Sandbox Code Playgroud)

如果您想基于某个对象实例获取字段,请GetType改用:

foreach (FieldInfo field in theObject.GetType().GetFields(bindingFlags))
{
    Console.WriteLine(field.Name);
}
Run Code Online (Sandbox Code Playgroud)


MrF*_*Fox 7

myClass.GetType().GetProperties()
Run Code Online (Sandbox Code Playgroud)

  • 他问的是变量而不是字段。 (4认同)