При десериализации перечислений в запросе строка, содержащая несколько допустимых значений перечисления, интерпретируется как последовательность битовых флагов, которые будут объединяться с использованием побитового оператора AND.
Это означает, что «вставить, обновить» "будет переводиться в 0b0 & 0b1
(двоичный 0 и двоичный 1), который равен 0b1
, который снова является значением перечисления Update
, что действительно допустимо.
Чтобы убедиться, что подобные комбинации не перекрываются в другое допустимое значение перечисления, используйте ненулевые кратные 2, как показано ниже:
public enum properAction
{
Insert = 1,
Update = 2,
Delete = 4
}
В двоичном формате все эти значения представляют собой строки нулей с одним 1
, что означает, что комбинация нескольких значения будут иметь несколько 1
с, что никогда не будет допустимым значением.