Ваш текущий код скажет, будет ли точно"дождь и гроза". Чтобы узнать, идет ли «дождь и гроза и, возможно, что-то еще», вам нужно:
if ((currentWeather.Type & _badWeatherTypes) == _badWeatherTypes)
Чтобы узнать, идет ли "дождь или гроза, и, возможно, что-то еще", вам нужно:
if ((currentWeather.Type & _badWeatherTypes) != 0)
РЕДАКТИРОВАТЬ (для полноты):
Было бы хорошо использовать FlagsAttribute
, то есть украсить тип с помощью [Flags]
. Это необязательно ради побитовой логики, но влияет на поведение ToString()
. Компилятор C # игнорирует этот атрибут (по крайней мере, на данный момент; спецификация C # 3.0 не упоминает его), но это, как правило, хорошая идея для перечислений, которые фактически являются флагами, и он документирует предполагаемое использование типа. В то же время, соглашение заключается в том, что когда вы используете флаги, вы вводите имя enum в множественном числе, поэтому вы меняете его на WeatherTypes
(потому что любое действительное значение фактически равно 0 или более типов погоды).
Также стоит подумать о том, что на самом деле означает "Солнечный". В настоящее время он имеет значение 0, что означает отсутствие всего остального; Вы не могли бы иметь солнечную погоду и дождь одновременно (что, конечно, физически возможно). Пожалуйста, не пишите код, запрещающий радугу! ;) С другой стороны, если в вашем реальном случае использования вы действительно хотите значение, которое означает «отсутствие всех других значений», то все в порядке.