使用枚举类型默认的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};
使用下面的方法,来得到对应项的字符串。
////// Contains methods for working with public static class EnumHelper { ///. /// /// Gets the specified enum value's description. /// /// The enum value. ///The description or 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; } ///null /// if enum value doesn't have. /// Gets the enum value by description. /// ///The enum type. /// The description. ///The enum value. public static EnumType GetValueByDescription(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."); } }
进一步了解