Основы C# Урок 69. Использование атрибута Flags для перечисления
Перед перечислением можно поставить атрибут Flags. Это означает, что мы сможем работать с таким перечислением как с набором битов. В частности, мы сможем использовать битовые операции.
Вот пример такого использования:
[Flags()]
public enum MilitaryType{
Marine = 1,
Land = 2,
Cosmic = 4,
MarineAndLand = Marine | Land,
AllType = Marine | Land | Cosmic
}
class Program
{
static void Main(string[] args)
{
MilitaryType type0 = MilitaryType.Land | MilitaryType.Cosmic;
Console.WriteLine(type0); //Выведется "Land, Cosmic"
Object o = Enum.Parse(typeof(MilitaryType), "Marine, Cosmic");
MilitaryType type1 = (MilitaryType)o;
}
}
Как вы видите, мы записали в переменную type0 результат побитовой операции двух переменных перечисляемого типа MilitaryType. В следующей строке мы выводим на консоль результат. На экран выведется "Land, Cosmic" (как следствие применения к MilitaryType атрибута Flags.
Обратное преоразование тоже действует. Так, мы с помощью метода Parse записываем в наше перечисление типа MilitaryType преобразованную строку "Marine, Cosmic". В результате этого в type1 окажется значение MilitaryType.Marine | MilitaryType.Cosmic.
Также обратите внимание, что для записи простых (т. е. не являющихся комбинацией других) значений в перечисление с атрибутом Flags надо использовать для их величин степени двойки.
|