Подтвердить что ты не робот

Как закодировать имена полей класса

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

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

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

Спасибо

4b9b3361

Ответ 1

для всех полей public + nonpublic instance:

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; });

Ответ 2

Попробуйте следующее:

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

Ответ 3

попробовать

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

Ответ 4

Эта работа для меня отлично 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));

Ответ 5

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

var t = typeof(YOURTYPE);

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

//t для типа