Недопустимое значение перечисления

Итак, у меня есть тип:

public enum Types
{
    aaa= 1,
    bbb= 2,
    ccc= 4
}

public class RequestPayload
{
    public int Prop1 { get; set; }
    public string Prop2 { get; set; }
    public Types Prop3 { get; set; }
}

И с Postman я тестирую веб-API.

public MyType Create([FromBody] RequestPayloadpayload)
{
    return null
}

Вот мои настройки почтальона:

введите здесь описание изображения

Итак, почему в контроллере мой объект имеет свойство Prop3 to 6666, когда в моем перечислении нет этого значения?


person Buda Gavril    schedule 17.11.2016    source источник


Ответы (1)


Я ничего не знаю о «почтальоне», но полагаю, вы удивлены тем, что значение int, отличное от 1, 2 или 4, может быть присвоено Prop3. Причина в том, что именно так работают перечисления в C#, поскольку под капотом поле типа перечисления преобразуется в int (или любой другой базовый тип перечисления), любое значение int может быть законно сохранено в нем.

Из MSDN:

enum Days : byte {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};  

Переменной типа Days можно присвоить любое значение в диапазоне базового типа; значения не ограничиваются именованными константами.

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

person D Stanley    schedule 17.11.2016
comment
Действительно, меня удивило, что я могу присваивать mu enum другие значения. - person Buda Gavril; 17.11.2016