Причины по которым 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 шт):
метод Type.GetFields, при вызове без параметров, возвращает публичные поля.
В приведенном коде публичных полей нет. Поэтому ничего и не возвращается.
Вместо полей в коде в вопросе используются свойства. Для их получения нужно воспользоваться методом Type.GetProperties