A-Dyu의 개발 일기장
[C#] Enum을 플래그로 사용하기 본문
C#에서 비트 값으로 플래그를 사용할 때 enum을 사용하여 쉽게 구현이 가능하다.
[Flag]
enum FlagEnum{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
}
만약 플래그의 개수가 많아진다면 비트 연산자로 비트를 옮겨 사용할 수 있다. 이것이 가능한 이유는 리터럴과 리터럴의 연산은 컴파일 시간에 계산해 하나의 상수로 컴파일되기 떄문이다.
[Flag]
enum FlagEnum{
Flag1 = 1 << 0,//1
Flag2 = 1 << 1,//2
Flag3 = 1 << 2,//4
None = 0, // 0
All = ~0, // 모든 비트가 1
}
그리고 or 비트 연산자를 사용하여 플래그를 지정해 사용한다.
만약 특정 플래그를 포함하는지 확인하려면, HasFlag 메소드를 사용하면 된다.
FlagEnum flag = FlagEnum.Falg1 | FlagEnum.flag2;
flag.HasFlag(FlagEnum.Flag1); // true
flag.HasFlag(FlagEnum.Flag3); // false
그리고 이걸 사용할 땐 이것이 플래그 Enum이라는 Flag어트리뷰트를 사용해야 하며, 이 어트리뷰트가 붙은 Enum은 ToString시 정수가 아닌 모든 플래그를 쉼표로 구별한 문자열을 반환한다.
enum Enum1
{
V1 = 1,
V2 = 2,
}
[Flags]
enum Enum2
{
V1 = 1,
V2 = 2,
}
Enum1 e1 = Enum1.V1 | Enum1.V2;
Enum2 e2 = Enum2.V1 | Enum2.V2;
e1.ToString(); // 3
e2.ToString(); // V1, V2
'C#' 카테고리의 다른 글
[C#] 리터럴 (0) | 2025.01.18 |
---|---|
[C#] List를 배열의 특정 부분에 전체 또는 일부 복사하기. (0) | 2024.07.30 |
[C#] C#에서 지원하는 자료구조들 (0) | 2024.07.29 |
[C#] 값의 집합을 저장하는 HashSet(해시셋) 클래스 (0) | 2024.07.29 |