본문 바로가기
개발

[C#]enum의 Flag 연산!

by 비손 2008. 9. 27.
enum(열거형)에서는 Flag(FlagsAttribute)속성이 있는데, 이를 이용하면 하나의 속성을 선택하는 것이 아니라 여러 속성을 선택하는 것이 가능합니다.
다음의 코드는 열거형의 Flag연산을 쉽게 정리해 놓은 것입니다.

[Flags]

public enum Column

{

None = 0,

Priority = 1 << 0,

Customer = 1 << 1,

Contract = 1 << 2,

Description = 1 << 3,

Tech = 1 << 4,

Created = 1 << 5,

Scheduled = 1 << 6,

DueDate = 1 << 7,

All = int.MaxValue

};

[Flags] 속성을 사용하면 아래와 같은 코드가 가능합니다.(두 속성을 하나의 변수에 담는 것):

Column MyColumns = Column.Customer | Column.Contract;

값이 존재하는지 확인:

if((MyColumns & Column.Customer) != 0)

특정 값을 추가:
MyColumns |= Column.Tech;

특정 값을 제거:

MyColumns &= ~Column.Tech;

특정 값을 반전(1은 0으로, 0은 1로):

MyColumns ^= Column.Contract;

모든 값 삭제:

MyColumns = Column.None;

모든 값 설정:

MyColumns = Column.All;

특정 값을 제외하고 모두 설정:

MyColumns = Column.All ^ Column.Tech ^ Column.Status;

출처: Wim's .NET blog, http://weblogs.asp.net/wim/archive/2004/04/07/109095.aspx, Jeremy Lundy의 댓글