Как закодировать имена полей класса
У меня есть класс, который содержит более 150 полей. Мне нужно имя полей (не значение) в массиве.
потому что его очень жесткий и неплохой подход для записи 150 имен полей (которые могут быть увеличены или уменьшены в счетчике в соответствии с изменением требований) вручную в коде.
Мне нужна помощь, чтобы получить петлю через имена для поля или получить список имен полей в массиве, чтобы я мог перебрать его и использовать в коде.
я использую visual studio 2008
Спасибо
Ответы
Ответ 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 для типа