본문 바로가기
Utils

C#, Description 통한 Enum 관리하기

by Client. DJ 2021. 12. 19.
반응형

Enum을 통한 일반적인 관리 방법

Enum을 통한 여러가지 관리 방법이 있습니다. 그 중에서 Description 어트리뷰트를 사용한 관리를 다루고자합니다.

public enum File
{
	Install,
	Image1,
	Image2,
	Image3,
	EXE,
}

위와 같이 각 파일을 지칭하는 Enum이 있고, 우리는 해당 값을 이용하여 파일 주소를 가져오고자 할 경우, 대체적으로 함수를 통해 처리를 합니다.

private string GetFilePath(File file)
{
	switch (file)
	{
		case File.Install:
			return "Project/Release/Insall.exe";
		case File.Image1:
			return "Project/Resources/Images/1.jpg";
		case File.Image2:
			return "Project/Resources/Images/2.jpg";
		case File.Image3:
			return "Project/Resources/Images/3.jpg";
		case File.EXE:
			return "Project/Release/Client.exe";
		default:
			return string.Empty;
	}
}
string path = GetFilePath(File.Image3);

Enum에 String 값 넣기

위의 코드는 문제가 없지만, 관리하는 방법에 있어서 더욱 효율적인 방법이 있습니다. Description 어트리뷰트를 통한 Enum관리입니다.

public enum File
{
	[Description("Project/Release/Insall.exe")]
	Install,
	[Description("Project/Resources/Images/1.jpg")]
	Image1,
	[Description("Project/Resources/Images/2.jpg")]
	Image2,
	[Description("Project/Resources/Images/3.jpg")]
	Image3,
	[Description("Project/Release/Client.exe")]
	EXE,
}

해당 Enum마다 문자열을 담을 수 있으며 다음 확장 함수를 추가하여 직관적이고 편리하게 사용할 수 있습니다.

using System;
using System.ComponentModel;
using System.Reflection;

public static class Utils
{
	/// <summary>
	/// Enum 확장메소드, Description 읽어오기
	/// </summary>
	/// <param name="source"></param>
	/// <returns></returns>
	public static string ToDescription(this Enum source)
	{
		FieldInfo fi = source.GetType().GetField(source.ToString());
		var att = (DescriptionAttribute)fi.GetCustomAttribute(typeof(DescriptionAttribute));
		if (att != null)
		{
			return att.Description;
		}
		else
		{
			return source.ToString();
		}
	}
}

예제

아래와 같이 사용할 수 있습니다.

//string path = GetFilePath(File.Image3);
string path = File.Image3.ToDescription();
반응형

댓글