Есть несколько вещей, которые вы делаете неправильно:
У вашего перечисления нет атрибута [Flags]
.HasFlags предназначен для работы только с перечислениями с этим набором атрибутов.
Вы не соблюдаете соглашения о флаге.Если Type3
не является комбинацией Type1
и Type2
, он должен иметь значение 4
вместо 3
.Прочитайте документацию на странице FlagsAttribute MSDN .
Ваши ожидания неверны: HasFlag(Flag1 | Flag2)
возвращает только значение true и Flag1 иFlag2 установлены, так как вы поразрядно ИЛИ -ing Flag1 и Flag2 и проверяете, установлены ли эти биты.Пожалуйста, ознакомьтесь с документацией HasFlag для получения более подробной информации.
Я подозреваю, что ваше перечисление должно быть просто перечислением , а неКонтейнер для флагов.Предполагается, что флаги можно комбинировать, т. Е. Типом может быть «Type1 и Type2» или «no type» или «all types» (например, форматирование шрифта, которое может быть «none», «bold», «italic», а также «жирный и курсив "," жирный и подчеркнутый "и т. д.).Я не думаю, что это применимо к вашему случаю.
Итак, забудьте о флагах и просто используйте регулярное сопоставление перечислений (например, type == EmploymentType.Type1 || type == EmploymentType.Type2
или оператор switch
) вместо метода HasFlags
.