Ваш второй параметр вернет true, если значения, которые вы дали своим значениям enum, не являются степенью двойки.Первый вариант не имеет этой проблемы.
Пример:
[Flags]
enum TransportModes
{
None = 0,
Bus = 1,
Train = 2,
Plane = 5
}
var trip = TransportModes.Bus | TransportModes.Train;
if((trip & TransportModes.Plane) != 0)
// will be executed
if((trip & TransportModes.Plane) == TransportModes.Plane)
// won't be executed
Объяснение:
trip & TransportModes.Plane
равно 1, что, по-видимому, != 0
, но не равно TransportModes.Plane
значение которого равно 5.
Однако, если вы не используете степени двойки для значений перечисления флага, у вас, скорее всего, возникнут более серьезные проблемы.Подумайте о том, что произойдет, если Plane
будет иметь значение 3: вы не можете отличить Bus | Train
и Plane
друг от друга ...