如何循环类的字段名称

时间:2010-09-10 10:50:25

标签: c# class loops field

我有一个包含超过150个字段的类。我需要数组中的字段名称(而不是值)。

因为在代码中手动编写150个字段名称(可以根据需求变化递增或递减计数)非常困难而且不是很好的方法。

我需要帮助来获取字段名称的循环或获取数组中的字段名称列表,以便我可以循环并在代码中使用它。 我正在使用visual studio 2008

由于

5 个答案:

答案 0 :(得分:18)

适用于所有公共+非公共实例字段:

var fields = typeof(YourType).GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var names = Array.ConvertAll(fields, field => field.Name);

或在VS2005中(评论):

FieldInfo[] fields = typeof(YourType).GetFields(
    BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
string[] names = Array.ConvertAll<FieldInfo, string>(fields,
    delegate(FieldInfo field) { return field.Name; });

答案 1 :(得分:9)

试试这个:

var t = typeof(YourTypeHere);
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name));

答案 2 :(得分:3)

    public static string[] GetFieldNames(Type t)
    {
        FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
        return fieldInfos.Select(x => x.Name).ToArray();
    }

答案 3 :(得分:1)

这项工作对我来说非常完美ExampleClass是类您需要列出所有字段

public void GetClassFields(Type t)
{
    List<string> fieldNames = new List<string>(t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance).Select(x => x.Name));
    foreach (string name in fieldNames)
    {
        Console.WriteLine(name);
    }       
}
//Usage
GetClassFields(typeof(ExampleClass));

答案 4 :(得分:1)

为我工作

var t = typeof(YOURTYPE);

var allfieldNames = new List<string>(t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Select(x => x.Name));

// t for Type