Мне приходится создавать метод расширения для каждого объявленного типа флага, например, так:
public static EventMessageScope SetFlag(this EventMessageScope flags,
EventMessageScope flag, bool value)
{
if (value)
flags |= flag;
else
flags &= ~flag;
return flags;
}
Почему не существует Enum.SetFlag
, как существует Enum.HasFlag
?
Также, почему это не всегда работает?
public static bool Get(this EventMessageScope flags, EventMessageScope flag)
{
return ((flags & flag) != 0);
}
Например, если у меня есть:
var flag = EventMessageScope.Private;
И проверить это как:
if(flag.Get(EventMessageScope.Public))
Где EventMessageScope.Public
действительно EventMessageScope.Private | EventMessageScope.PublicOnly
, то возвращается true.
Когда это не так, потому что Private
не является публичным, это просто полупубличный вариант.
То же самое касается:
if(flag.Get(EventMessageScope.None))
Который возвращает false
, за исключением того, что область видимости на самом деле None
(0x0
), когда он всегда должен возвращать true?