[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Атрибут [Flags] слід використовувати у всіх випадках, коли перелічуваний являє собою колекцію можливих значень, а не одне значення. Такі колекції часто використовуються, наприклад, з побітовими операторами:
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						[Flags]     enum Month     {         January = 2,         June = 4,         July = 8,         August = 16,         November = 32,         December = 64,         Winter = November | December | January     }  | 
					
В одну змінну перерахування, ви можете присвоїти кілька значень:
| 
					 1 2 3 4 5 6  | 
						static void Main()     {         Month myBestMonths = Month.December | Month.July | Month.June;         Console.WriteLine(myBestMonths); //June, July, December         Console.WriteLine((int)myBestMonths); //19     }  | 
					
Так само, ви можете зсувати попередні значення по бітах, а не використовувати числа. Не обов’язково рекомендувати це, але просто вказати, що це можливо:
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						[Flags]     enum Month     {         January = 0,         June = 1 << 0,//1         July = 1 << 1,//2         August = 1 << 2,//4         November = 1 << 3,//8         December = 1 << 4//16     }  | 
					
Коректно відобразити значення перерахування можна таким чином:
| 
					 1 2 3 4 5 6 7  | 
						static void Main()     {         foreach (var e in Enum.GetValues(typeof(Month)))         {             Console.WriteLine("{0} = {1}", e.ToString(), (int)e);         }     }  | 
					
Під час роботи з прапорами я часто оголошую додаткові елементи None і All. Вони допомагають перевірити, чи всі прапори встановлені або жоден прапор не встановлений.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22  | 
						static void Main()     {         Month allMonths = Month.January | Month.June | Month.July | Month.August | Month.November | Month.December;         if (allMonths == Month.All)         {             Console.WriteLine("All flags sets!");         }     }     [Flags]     enum Month     {         None = 0,         January = 1 << 0,         June = 1 << 1,         July = 1 << 2,         August = 1 << 3,         November = 1 << 4,         December = 1 << 5,         All = ~(~0 << 6)     }  | 
					
Починаючи з C# 7.0 ви можете використовувати двійкові літерали, які, ймовірно, більш інтуїтивно зрозумілі для читання:
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						[Flags]     enum Month     {         None = 0b0000,         January = 0b0001,         June = 0b0010,         July = 0b0100,         August = 0b1000,         All = 0b1111     }  | 
					









