[C#] Enum to String, enum 값 그대로 말고, 별도의 설명 값 가져오기~

C#에서 enum을 문자열로 변환하려고 하는데요, 주어진 int 또는 String으로 변환한 값이 아니라 각 열거형 별 원하는 값을 가져오고 싶어요. 그리하여 Description 속성을 활용해 보기로 하였습니다.

enum의 값에 정의된 Description 속성을 추출하여 조회하려고 해요. 만약 Description 속성이 존재하면, 해당 속성의 값을 문자열로 반환하고, 그렇지 않은 경우에는 enum의 기본 이름을 반환하도록 해보겠습니다.

enum을 문자열로 변환하는 방법

  1. enum 정의: enum은 정수형 상수를 의미하며, 보통 코드 내에서 가독성을 높이고 특정 값 집합을 관리할 때 유용합니다. 하지만 enum 값 자체는 문자열이 아니기 때문에, 사용자에게 더 직관적인 문자열로 표현하고 싶을 때 Description 속성을 사용해 보도록 할게요.

  2. Description 속성: C#에서 제공하는 System.ComponentModel.DescriptionAttribute를 활용하면, enum의 각 항목에 설명을 붙일 수 있습니다. 이 속성을 통해 코드 내에서 enum의 설명을 문자열로 변환해 보겠습니다.

  3. GetDescription 메서드: GetDescription 메서드는 다음과 같은 과정을 통해 작동하도록 만들었습니다. 필요 시 확장 메서드를 만들어 사용해 보세요.

    • 우선, enum의 필드 정보를 GetField 메서드를 통해 가져옵니다.
    • 그 후, 해당 필드에 Description 속성이 정의되어 있는지 확인합니다.
    • 만약 Description 속성이 존재하면, 그 값을 반환하고, 그렇지 않으면 enum의 이름 자체를 반환합니다.
public static class EnumClass
{
    public enum EnumName
    {
        [Description("첫번째 항목")]
        첫번째,
        두번째
    }

    public static string GetDescription(Enum source)
    {
        FieldInfo fi = source.GetType().GetField(source.ToString());
        DescriptionAttribute da = (DescriptionAttribute)fi.GetCustomAttribute(typeof(DescriptionAttribute));
        if (da != null)
        {
            return da.Description;
        }
        else
        {
            return source.ToString();
        }
    }
}

Enum to String

첫 번째 enum은 설명 속성이 있기에 "첫번째 항목"을 조회하고, 두 번째 enum은 설명이 없기에 이름을 그대로 조회합니다.

EnumClass.EnumName enumName1 = EnumClass.EnumName.첫번째;
EnumClass.EnumName enumName2 = EnumClass.EnumName.두번째;
//첫번째 항목
string description1 = EnumClass.GetDescription(enumName1);
//두번째
string description2 = EnumClass.GetDescription(enumName2); 
  • enum을 문자열로 변환할 때, Description 속성을 활용하면 사용자가 이해하기 쉬운 설명을 반환할 수 있습니다~
  • GetDescription 메서드는 enum 필드의 Description 속성을 가져와 그 값을 반환하며, 속성이 없을 경우에는 enum의 기본 이름을 반환하여 처리합니다.
  • 이 방법은 코드를 더 직관적으로 만들 수 있을 거예요.
댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗