Мне нужно создать метод расширения для каждого объявляемого типа флага, например:
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?