Метод HasFlag
Метод экземпляра HasFlag есть у любого
Enum, но смысл даёт перечисление с
[Flags], где константы - степени двойки
и их можно комбинировать через |.
HasFlag возвращает true, если
все биты аргумента установлены в текущем
значении. Для обычного enum без флагов
удобнее сравнение на равенство.
Синтаксис
[Flags]
enum Mark { None = 0, Read = 1, Write = 2 }
bool ok = (Mark.Read | Mark.Write).HasFlag(Mark.Read);
Пример
Давайте проверим флаг Read в комбинации
Read | Write:
using System;
[Flags]
enum Mark { None = 0, Read = 1, Write = 2 }
class Program
{
static void Main()
{
Mark mode = Mark.Read | Mark.Write;
bool res = mode.HasFlag(Mark.Read);
Console.WriteLine(res);
}
}
Результат выполнения кода:
True
Пример
Давайте проверим флаг, который не включён:
using System;
[Flags]
enum Mark { None = 0, Read = 1, Write = 2 }
class Program
{
static void Main()
{
Mark mode = Mark.Read;
bool res = mode.HasFlag(Mark.Write);
Console.WriteLine(res);
}
}
Результат выполнения кода:
False
Пример
Давайте проверим оба флага по очереди:
using System;
[Flags]
enum Mark { None = 0, Read = 1, Write = 2 }
class Program
{
static void Main()
{
Mark mode = Mark.Read | Mark.Write;
Console.WriteLine(mode.HasFlag(Mark.Read));
Console.WriteLine(mode.HasFlag(Mark.Write));
}
}
Результат выполнения кода:
True
True