C#에서 enum을 문자열로 변환하려고 하는데요, 주어진 int 또는 String으로 변환한 값이 아니라 각 열거형 별 원하는 값을 가져오고 싶어요. 그리하여 Description 속성을 활용해 보기로 하였습니다.
enum의 값에 정의된 Description 속성을 추출하여 조회하려고 해요. 만약 Description 속성이 존재하면, 해당 속성의 값을 문자열로 반환하고, 그렇지 않은 경우에는 enum의 기본 이름을 반환하도록 해보겠습니다.
enum을 문자열로 변환하는 방법
enum정의:enum은 정수형 상수를 의미하며, 보통 코드 내에서 가독성을 높이고 특정 값 집합을 관리할 때 유용합니다. 하지만enum값 자체는 문자열이 아니기 때문에, 사용자에게 더 직관적인 문자열로 표현하고 싶을 때Description속성을 사용해 보도록 할게요.Description속성: C#에서 제공하는System.ComponentModel.DescriptionAttribute를 활용하면,enum의 각 항목에 설명을 붙일 수 있습니다. 이 속성을 통해 코드 내에서enum의 설명을 문자열로 변환해 보겠습니다.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은 설명 속성이 있기에 "첫번째 항목"을 조회하고, 두 번째 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의 기본 이름을 반환하여 처리합니다.- 이 방법은 코드를 더 직관적으로 만들 수 있을 거예요.
