Section 22.7: 예상치 못한 값으로 변경될 수도 있는 Enum

Enum 은 기반이 되는 숫자형 데이터 타입으로 상호 변환이 될 수 있기에, 그 값이 Enum 타입이 정의되었던 값 범위에서 벗어나는 경우가 생길 수 있다.

아래에 정의된 Enum 타입인 DaysOfWeek 는 7개의 값에 대해서만 선언이 되어 있지만, 실제적으로 Enum 변수는 어떠한 int 값이라도 가질 수가 있다.

public enum DaysOfWeek { Monday = 1, Tuesday = 2, Wednesday = 3, Thursday = 4, Friday = 5, Saturday = 6, Sunday = 7 } DaysOfWeek d = (DaysOfWeek)31; Console.WriteLine(d); // 31 이 출력된다 DaysOFWeek s = DaysOfWeek.Sunday; s++; // 에러가 발생되지 않는다

현재로써는 Enum 으로 하여금 이러한 동작을 막을 수 있도록 선언하는 방법이 존재하지 않는다.

그러나, 선언되지 않은 Enum 값을 Enum.IsDefined 메소드를 통해 감지해 낼 수는 있다. 예를 들어,

DaysOfWeek d = (DaysOfWeek)31; Console.WriteLine(Enum.IsDefined(typeof(DaysOfWeek),d)); // False 를 출력한다
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

[출처] https://books.goalkicker.com/CSharpBook/

반응형

+ Recent posts