Enum Flags dùng để cho phép enumeration variable giữ nhiều giá trị. Nên dùng khi enum đại diện cho collection of flags thay vì single value.
Dùng FlagsAttribute cho enumeration chỉ khi thực hiện bitwise operation (AND, OR, XOR) trên numeric value.
Định nghĩa enumeration constants theo powers of two: 1, 2, 4, 8... Điều này đảm bảo individual flags trong combined enumeration constants không overlap.
Ví dụ
class Program
{
[Flags]
enum SocialMediaFlags
{
None = 0,
Facebook = 1,
Twitter = 2,
LinkedIn = 4,
Instagram = 8,
Snapchat = 16,
Pinterest = 32,
Reddit = 64
}
static void Main()
{
var SocialMedia1 = SocialMediaFlags.Facebook | SocialMediaFlags.Twitter | SocialMediaFlags.Instagram;
var SocialMedia2 = SocialMediaFlags.LinkedIn;
var SocialMedia3 = SocialMediaFlags.Pinterest | SocialMediaFlags.Reddit;
SocialMediaFlags[] SocialMediasFlags = { SocialMedia1, SocialMedia2, SocialMedia3 };
for (int ctr = 0; ctr < SocialMediasFlags.Length; ctr++)
if ((SocialMediasFlags[ctr] & SocialMediaFlags.Facebook) == SocialMediaFlags.Facebook)
{
Console.WriteLine("SocialMedia {0} has Facebook service: {1}", ctr + 1, "Yes");
}
Console.WriteLine();
}
}
Kết quả
SocialMedia 1 has Facebook service: Yes
Chỉ SocialMedia1 có Facebook flag do dùng bitwise OR kết hợp.