좀 더 확장 가능한 솔루션을 만들기 위해 여기에 몇 가지 답변을 병합했습니다. 앞으로 다른 사람에게 도움이 될 경우를 대비하여 제공하고 있습니다. 원래 게시물은 여기에 있습니다 .
using System;
using System.ComponentModel;
public static class EnumExtensions {
// This extension method is broken out so you can use a similar pattern with
// other MetaData elements in the future. This is your base method for each.
public static T GetAttribute<T>(this Enum value) where T : Attribute {
var type = value.GetType();
var memberInfo = type.GetMember(value.ToString());
var attributes = memberInfo[0].GetCustomAttributes(typeof(T), false);
return attributes.Length > 0
? (T)attributes[0]
: null;
}
// This method creates a specific call to the above method, requesting the
// Description MetaData attribute.
public static string ToName(this Enum value) {
var attribute = value.GetAttribute<DescriptionAttribute>();
return attribute == null ? value.ToString() : attribute.Description;
}
}
이 솔루션은 Enum에 확장 메소드 쌍을 만듭니다. 첫 번째는 리플렉션을 사용하여 값과 관련된 모든 속성을 검색 할 수 있습니다. 두 번째는 구체적으로 호출을 검색하여 값을 DescriptionAttribute
반환합니다 Description
.
예를 들어, DescriptionAttribute
from 속성을 사용해보십시오System.ComponentModel
using System.ComponentModel;
public enum Days {
[Description("Sunday")]
Sun,
[Description("Monday")]
Mon,
[Description("Tuesday")]
Tue,
[Description("Wednesday")]
Wed,
[Description("Thursday")]
Thu,
[Description("Friday")]
Fri,
[Description("Saturday")]
Sat
}
위의 확장 방법을 사용하려면 이제 다음을 호출하면됩니다.
Console.WriteLine(Days.Mon.ToName());
또는
var day = Days.Mon;
Console.WriteLine(day.ToName());