Получение списка полей класса

Вопрос: Я пытаюсь создать общий метод для моего поиска, но я не знаю, как вернуть список полей из моего класса. Скажем, у меня есть класс: public class Table { [Key] public int ID { get; set; } public string Name { get; set; } public string Address { get; set; } } И теперь я

Вопрос:

Я пытаюсь создать общий метод для моего поиска, но я не знаю, как вернуть список полей из моего класса.

Скажем, у меня есть класс:

public class Table { [Key] public int ID { get; set; } public string Name { get; set; } public string Address { get; set; } }

И теперь я хочу вернуть список, который будет выглядеть следующим образом:

«ID» «Name» «Address»

Как мне это сделать?

попробовал что-то вроде этого:

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

Но у него есть лишний текст после имен полей

РЕДАКТИРОВАТЬ

Это не дублируется, потому что в моей ситуации GetProperties(). Выбор (f => f.Name) сделал разницу

Лучший ответ:

Вы можете сделать это с отражением:

var listOfFieldNames = typeof(Table).GetProperties().Select(f => f.Name).ToList();

Обратите внимание, что вам явно нужны свойства, а не поля. Термин “поля” относится к частным (экземплярам) членам. Публичные геттеры/сеттеры называются свойствами.

Ответ №1

Вы хотите использовать то, что известно как отражение. Вы можете получить массив объектов PropertyInfo следующим образом:

PropertyInfo[] properties = typeof(Table).GetType().GetProperties();

Класс PropertyInfo содержит информацию о каждом свойстве в классе, включая их имена (что вас интересует). Есть много и много других вещей, которые вы можете сделать с отражением, но это, безусловно, один из самых распространенных.

EDIT: изменил мой ответ, чтобы не требовать экземпляр Table.

Ответ №2

Вы можете написать функцию полезности, которая получает имена свойств в данном классе:

static string[] GetPropertyNames<T>() => typeof(T) .GetProperties() .Select(prop => prop.Name) .ToArray();

Кроме того, вы можете предоставить метод расширения в классе Type, а затем оснастить его самой этой функцией:

static class TypeExtensions { public static string[] GetPropertyNames(this Type type) => type .GetProperties() .Select(prop => prop.Name) .ToArray(); } … foreach (string prop in typeof(Table).GetPropertyNames()) Console.WriteLine(prop);

Этот код печатает три имени свойств типа таблицы:

ID Name Address

Оцените статью
Добавить комментарий