我有一個擴展方法來做到這一點:
public static string GetDescription(this Enum enumValue)
{
//Look for DescriptionAttributes on the enum field
object[] attr = enumValue.GetType().GetField(enumValue.ToString())
.GetCustomAttributes(typeof (DescriptionAttribute), false);
if (attr.Length > 0) // a DescriptionAttribute exists; use it
return ((DescriptionAttribute) attr[0]).Description;
//The above code is all you need if you always use DescriptionAttributes;
//If you don't, the below code will semi-intelligently
//"humanize" an UpperCamelCased Enum identifier
string result = enumValue.ToString();
//"FooBar" -> "Foo Bar"
result = Regex.Replace(result, @"([a-z])([A-Z])", "$1 $2");
//"Foo123" -> "Foo 123"
result = Regex.Replace(result, @"([A-Za-z])([0-9])", "$1 $2");
//"123Foo" -> "123 Foo"
result = Regex.Replace(result, @"([0-9])([A-Za-z])", "$1 $2");
//"FOOBar" -> "FOO Bar"
result = Regex.Replace(result, @"(?<!^)(?<!)([A-Z][a-z])", " $1");
return result;
}
用法:
var description = DataType.Alpha.GetDescription(); //"A"
public enum TestEnums
{
IAmAComplexABCEnumValue,
}
//"I Am A Complex ABC Enum Value"
var complexCamelCasedDescription = TestEnums.IAmAComplexABCEnumValue.GetDescription();
請參閱http://stackoverflow.com/questions/540241/exposing-the-descriptionattribute-of-enums-from-a-wcf-service中的評論。 – neontapir 2012-08-14 19:28:50