使用枚举类型默认的ToString()方法,往往不能得到我们想要的输出的字符串。
如何方便的定义枚举类型中的每个值代表的字符串输出呢?
可以使用DescriptionAttribute, 写上想得到的字符串输出。
enum Direction { [Description("Rover is facing to UP (Negtive Y)")] UP = 1, [Description("Rover is facing to DOWN (Positive Y)")] DOWN = 2, [Description("Rover is facing to RIGHT (Positive X)")] RIGHT = 3, [Description("Rover is facing to LEFT (Negtive X)")] LEFT = 4 };
使用下面的方法,来得到对应项的字符串。
/// <summary> /// Contains methods for working with <see cref="Enum"/>. /// </summary> public static class EnumHelper { /// <summary> /// Gets the specified enum value's description. /// </summary> /// <param name="value">The enum value.</param> /// <returns>The description or <c>null</c> /// if enum value doesn't have <see cref="DescriptionAttribute"/>.</returns> public static string GetDescription(this Enum value) { var fieldInfo = value.GetType().GetField(value.ToString()); var attributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes( typeof(DescriptionAttribute), false); return attributes.Length > 0 ? attributes[0].Description : null; } /// <summary> /// Gets the enum value by description. /// </summary> /// <typeparam name="EnumType">The enum type.</typeparam> /// <param name="description">The description.</param> /// <returns>The enum value.</returns> public static EnumType GetValueByDescription<EnumType>(string description) { var type = typeof(EnumType); if (!type.IsEnum) throw new ArgumentException("This method is destinated for enum types only."); foreach (var enumName in Enum.GetNames(type)) { var enumValue = Enum.Parse(type, enumName); if (description == ((Enum)enumValue).GetDescription()) return (EnumType)enumValue; } throw new ArgumentException("There is no value with this description among specified enum type values."); } }