[Flags] Attribute** บอก Compiler ว่า Enum นี้ใช้เป็น Bit Flags (Bitwise Operations) ได้
กติกา
- Value ต้องเป็น Power of 2: 1, 2, 4, 8, 16, 32, 64... (Bit เดียวต่อ Value)
- รวม Flags ด้วย Bitwise OR (
|) - เช็ค Flag ด้วย Bitwise AND (
&)
ตัวอย่าง
[Flags]
enum SocialMediaFlags
{
None = 0,
Facebook = 1, // 0001
Twitter = 2, // 0010
LinkedIn = 4, // 0100
Instagram = 8, // 1000
Snapchat = 16,
Pinterest = 32,
Reddit = 64
}
// Combine Flags
var social1 = SocialMediaFlags.Facebook | SocialMediaFlags.Twitter | SocialMediaFlags.Instagram; // 1|2|8 = 11
var social2 = SocialMediaFlags.LinkedIn; // 4
var social3 = SocialMediaFlags.Pinterest | SocialMediaFlags.Reddit; // 32|64 = 96
// Check Flag
if ((social1 & SocialMediaFlags.Facebook) == SocialMediaFlags.Facebook)
{
Console.WriteLine("Has Facebook");
}
Output
SocialMedia 1 has Facebook service: Yes
ToString() กับ Flags
Console.WriteLine(social1); // "Facebook, Twitter, Instagram" Console.WriteLine(social3); // "Pinterest, Reddit"
โดยไม่มี [Flags] จะแสดงค่า Number แทน (เช่น "11")