using System;
// Enum을 그대로 출력하면 String 출력됩니다.
Console.WriteLine(EnumBit.AAA);
Console.WriteLine(EnumBit.BBB);
Console.WriteLine(EnumBit.CCC);
Console.WriteLine(EnumBit.DDD);
Console.WriteLine(EnumBit.EEE);
// Enum을 byte, short, int, long으로 형변환하면 할당한 숫자가 출력됩니다.
Console.WriteLine((int)EnumBit.AAA);
Console.WriteLine((int)EnumBit.BBB);
Console.WriteLine((int)EnumBit.CCC);
Console.WriteLine((int)EnumBit.DDD);
Console.WriteLine((int)EnumBit.EEE);
// Enum으로 Bit 연산을 수행합니다.
EnumBit myStatus1 = EnumBit.AAA | EnumBit.BBB | EnumBit.CCC | EnumBit.DDD | EnumBit.EEE;
Console.WriteLine(myStatus1);
Console.WriteLine((int)myStatus1);
EnumBit myStatus2 = EnumBit.AAA | EnumBit.CCC | EnumBit.DDD;
Console.WriteLine(myStatus2);
Console.WriteLine((int)myStatus2);
bool myStatus2Check1 = myStatus2.HasFlag(EnumBit.AAA); // 포함되어 있습니다.
bool myStatus2Check2 = myStatus2.HasFlag(EnumBit.BBB); // 포함되지 않았습니다.
Console.WriteLine(myStatus2Check1);
Console.WriteLine(myStatus2Check2);
EnumBit enumValue1 = (EnumBit)31;
Console.WriteLine(enumValue1); // 사전에 정의한 enum값의 범위 안에있으면 정상 Enum 값을 나열합니다.
EnumBit enumValue2 = (EnumBit)1035;
Console.WriteLine(enumValue2); // 사전에 정의한 enum값의 범위를 초과하면 숫자가 나열됩니다.
[Flags]
enum EnumBit
{
AAA = 1 << 0, // 1
BBB = 1 << 1, // 2
CCC = 1 << 2, // 4
DDD = 1 << 3, // 8
EEE = 1 << 4, // 16
}
enum에 FlagsAttribute를 사용하면 bit 연산을 가능하게 합니다.
enum으로 상태값을 저장해놓고 데이터에 대하여 여러상태를 저장하고 싶을 때 쉽게 사용할 수 있습니다.