Как зациклить на именах полей класса - PullRequest
21 голосов
/ 10 сентября 2010

У меня есть класс, который содержит более 150 полей.Мне нужно имя поля (не значение) в массиве.

, потому что очень трудно и не очень хороший способ написать 150 имен полей (которые могут быть увеличены или уменьшены в количестве в зависимости от изменения требования) вручную вcode.

Мне нужна помощь, чтобы получить циклические имена для полей или получить список имен полей в массиве, чтобы я мог зацикливаться на нем и использовать его в коде.Я использую Visual Studio 2008

Спасибо

Ответы [ 5 ]

18 голосов
/ 10 сентября 2010

для всех открытых + закрытых полей экземпляра:

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; });
9 голосов
/ 10 сентября 2010

Попробуйте это:

var t = typeof(YourTypeHere);
List<string> fieldNames = new List<string>(t.GetFields().Select(x => x.Name));
3 голосов
/ 10 сентября 2010

попробуй

    public static string[] GetFieldNames(Type t)
    {
        FieldInfo[] fieldInfos = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
        return fieldInfos.Select(x => x.Name).ToArray();
    }
1 голос
/ 10 июня 2015

работал для меня

var t = typeof(YOURTYPE);

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

// т для Типа

1 голос
/ 14 февраля 2014

Это прекрасно для меня. 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));
...