enum Orientation { [DescriptionAttribute("东")] East, [DescriptionAttribute("南")] South, [DescriptionAttribute("西")] West, [DescriptionAttribute("北")] North }
但又如何获取DescriptionAttribute的内容呢?呵呵,答案就是通过反射。下面是我封装获取DescriptionAttribute内容的扩展方法。
static string GetDescription<T>(this T value) { var memInfo = value.GetType().GetMember(value.ToString()); var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false).Cast<DescriptionAttribute>(); if (attributes.Any()) return attributes.First().Description; return string.Empty; }
下面就是测试的代码以及测试结果
static class Program { enum Orientation { [DescriptionAttribute("东")] East, [DescriptionAttribute("南")] South, [DescriptionAttribute("西")] West, [DescriptionAttribute("北")] North } static string GetDescription<T>(this T value) { var memInfo = value.GetType().GetMember(value.ToString()); var attributes = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false).Cast<DescriptionAttribute>(); if (attributes.Any()) return attributes.First().Description; return string.Empty; } static void Main() { foreach (var s in Enum.GetValues(typeof(Orientation))) { Console.WriteLine("值:{0} 说明:{1}",s.ToString(),s.GetDescription()); } } }
从输出可以看出,程序成功的获取了枚举值的说明内容,这样就可以利用这种模式方便的对枚举值添加中文说明,然后在需要的时候提取出来,如:需要做数据绑定的时候。