Как вернуть названия всех полей класса?

215
30 мая 2018, 10:40

Как сделать функцию внутри класса, которая может вернуть энумератор/список string c названиями всех публичных полей этого класса? Например есть класс:

public class MyClass
{
    public int MyField {get; set;}
}

В нем определим функцию:

public List<string> GetAllField()
{
//
}

Суть в том, что бы можно было добавлять поля и не править каждый раз функцию GetAllField()

Answer 1

Воспользоваться рефлексией и получить данные о полях из самого класса -

public IEnumerable<string> GetPublicProperties() {
    return this.GetType()
        .GetProperties()
        .Where(x => x.GetMethod.IsPublic)
        .Select(x => x.Name)
        .ToArray();
}

Однако подобный код будет ресурсозатратным, лучше вынести определение полей в статический конструктор класса

public class Example
{
    private static readonly string[] _publicProperties;
    static Example()
    {
        _publicProperties = typeof(Example)
            .GetProperties()
            .Where(x => x.GetMethod.IsPublic)
            .Select(x => x.Name)
            .ToArray();
    }
    public int Id { get; set; }
    public string TestValue { get; set; }
    public string TestValue2 { get; private set; }
    public IEnumerable<string> GetPublicProperties()
    {
        return _publicProperties;
    }
}
READ ALSO
Кодировка mysql в командной строке

Кодировка mysql в командной строке

Использую mysql При выводе в командной строке кракозябры Подскажите как вывести правильные записи кирилицу

249
Как правильно отредактировать виджет?

Как правильно отредактировать виджет?

Как правильно отредактировать виджет в вордпресе? Я наследую тему, создаю дочернюю, в которой все, что нужно, перезаписываюНо столкнулся...

280
Задание роутов в популярных php-frameworks

Задание роутов в популярных php-frameworks

Подскажите, мне нужно вручную задать url-страницыТо есть к примеру в форме ввожу имя "aboutus", записывает в базы данных, и создается страница с таким...

187
Не срабатывает if - условие

Не срабатывает if - условие

Всем приветПроблема заключается в том, что не срабатывает

165