Причины по которым Type.GetFields() может возвращать пустой массив

Есть класс AccessTypes:

public class AccessTypes
{   
    public AccessTypes() 
    {
        Friends = 1;
        All = 2;
        Marked = 3;
    }

    public int Friends { get; set; }
    public int All { get; set; }
    public int Marked { get; set; }
}

Есть метод ASP.NET MVC контроллера:

[HttpGet]
[Route("GetAccessSettings")]
public IActionResult GetAccessSettings()
{
    AccessTypes AccessTypes = new AccessTypes();

    return Ok(AccessTypes.GetType().GetFields()[0].Name); // Тут возникает исключение
}

Возникает исключение: System.IndexOutOfRangeException: "Index was outside the bounds of the array."

Как бы я не старался вытянуть поля из экземпляра класса AccessTypes, метод GetFields() всегда возвращает пустой массив. Раньше метод работал безотказно на сущностях для Entity Framework или *.dto.cs объектах, но сейчас, когда класс был создан мной, метод отказывается работать. Может нужно прописывать какие то декораторы или особым образом называть поля класса? Совсем не понимаю куда копать.


Ответы (1 шт):

Автор решения: Grundy

метод Type.GetFields, при вызове без параметров, возвращает публичные поля.

В приведенном коде публичных полей нет. Поэтому ничего и не возвращается.


Вместо полей в коде в вопросе используются свойства. Для их получения нужно воспользоваться методом Type.GetProperties

→ Ссылка