1 #region 枚举公用转换类
2 public class EnumDescConverter : System.ComponentModel.EnumConverter
3 {
4 protected System.Type m_MyVal;
5 public static string GetEnumDescription(Enum value)
6 {
7 FieldInfo fi = value.GetType().GetField(value.ToString());
8 DescriptionAttribute[] attributes =
9 (DescriptionAttribute[])fi.GetCustomAttributes(
10 typeof(DescriptionAttribute), false);
11 return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
12 }
13
14 public static string GetEnumDescription(System.Type value, string name)
15 {
16 FieldInfo fi = value.GetField(name);
17 DescriptionAttribute[] attributes =
18 (DescriptionAttribute[])fi.GetCustomAttributes(
19 typeof(DescriptionAttribute), false);
20 return (attributes.Length > 0) ? attributes[0].Description : name;
21 }
22 public static object GetEnumValue(System.Type value, string description)
23 {
24 FieldInfo[] fis = value.GetFields();
25 foreach (FieldInfo fi in fis)
26 {
27 DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(typeof(DescriptionAttribute), false);
28 if (attributes.Length > 0)
29 {
30 if (attributes[0].Description == description)
31 {
32 return fi.GetValue(fi.Name);
33 }
34 }
35 if (fi.Name == description)
36 {
37 return fi.GetValue(fi.Name);
38 }
39 }
40 return description;
41 }
42 public EnumDescConverter(System.Type type)
43 : base(type.GetType())
44 {
45 m_MyVal = type;
46 }
47 public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
48 {
49 if (value is Enum && destinationType == typeof(string))
50 {
51 return GetEnumDescription((Enum)value);
52 }
53 if (value is string && destinationType == typeof(string))
54 {
55 return GetEnumDescription(m_MyVal, (string)value);
56 }
57 return base.ConvertTo(context, culture, value, destinationType);
58 }
59
60 public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
61 {
62 if (value is string)
63 {
64 return GetEnumValue(m_MyVal, (string)value);
65 }
66 if (value is Enum)
67 {
68 return GetEnumDescription((Enum)value);
69 }
70 return base.ConvertFrom(context, culture, value);
71 }
72 }
73 #endregion