Із змінними переліченого типу можна виконувати арифметичні операції ( +, - ++, --), логічні порозрядні операції (*, &, |, ~), порівнювати їх за допомогою операцій відношення (<, < =, >, >= = =, ! = ) і отримувати розмір в байтах (sizeof).
При використанні змінних переліченого типу в цілочисельних виразах і операціях привласнення потрібне явне перетворення типу. Змінній переліченого типу можна привласнити будь-яке значення, уявне за допомогою базового типу, тобто не тільки одне із значень, що входять в тіло перелічення. Привласнюване значення стає новим елементом перелічення.
Приклад:
Flags а = Flags.b2 | Flags.b4;
Console.WriteLine( "а = {0} {0,2:Х}", а );
++а;
Console.WriteLine( "а = {0} {0.2:X}", а );
int х = (int) а;
Console.WriteLine( "x = {0} {0.2:X}", x );
Flags b = (Flags) 65;
Console.WriteLine( "b = {0} {0.2:X}", b );
Результат роботи цього фрагмента програми ( {0,2:х} позначає шістнадцятирічний формат виведення):
a = 10 0A
a = 11 0B
x = 11 B
b = 65 41
Інший приклад використання операцій з переліченнями приведений в лістингу 9.11.
Лістинг 9.11. Операції з переліченнями
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace examp64
{
struct Боец
{
public enum Воинское_Звание
{ Рядовой, Сержант, Лейтенант, Майор, Полковник, Генерал }
public string Фамилия;
public Воинское_Звание Звание;
}
class Program
{
static void Main(string[] args)
{
Боец x;
x.Фамилия = " Иванов ";
x.Звание = Боец.Воинское_Звание.Сержант;
for (int i = 1976; i < 2006; i += 5)
{
if (x.Звание < Боец.Воинское_Звание.Генерал) ++x.Звание;
Console.WriteLine("Рік: {0} {1} {2}", i, x.Звание, x.Фамилия);
}
}
}
}
Результат роботи програми:
Рік 1976 Лейтенант Иванов
Рік 1981 Майор Иванов
Рік 1986 Полковник Иванов
Рік 1991 Генерал Иванов
Рік 1996 Генерал Иванов
Рік 2001 Генерал Иванов