Section 22.9: Enum 값에 부가적인 세부 설명을 추가하기

경우에 따라서, Enum 값의 이름만으로는 사용자에게 표시해주고자 하는 정보를 모두 표현하기가 어렵다는 등의 이유로, 각 Enum 들에 대해 추가적인 설명을 덧붙이고 싶을 수가 있다. 이러한 경우에는 System.ComponentModel.DescriptionAttribute 클래스를 사용할 수 있다.

예제:

public enum PossibleResults { [Description("Success")] OK = 1, [Description("File not found")] FileNotFound = 2, [Description("Access denied")] AccessDenied = 3 }

이제, 특정 Enum 값에 대해 기술된 부가 설명 내용을 반환하고자 한다면 아래와 같은 방법을 사용할 수 있다:

public static string GetDescriptionAttribute(PossibleResults result) { return ((DescriptionAttribute) Attribute.GetCustomAttribute((result.GetType().GetField(result.ToString())), typeof (DescriptionAttribute))).Description; } static void Main(string[] args) { PossibleResults result = PossibleResults.FileNotFound; Console.WriteLine(result); // "FileNotFound" 를 출력한다 Console.WriteLine(GetDescriptionAttribute(result)); // "File not found" 를 출력한다 }

위 코드는 모든 Enum 들에 적용 가능한 extension method 형태로 손쉽게 변환될 수 있다:

static class EnumExtensions { public static string GetDescription(this Enum enumValue) { return ((DescriptionAttribute) Attribute.GetCustomAttribute((enumValue.GetType().GetField(enumValue.ToString())), typeof (DescriptionAttribute))).Description; } }

이제 다음과 같이 간단하게 사용이 가능하다:

Console.WriteLine(result.GetDescription());
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.

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

반응형

+ Recent posts