1
using System;
2
using System.Collections;
3
using System.Text;
4
using System.ComponentModel;
5
using System.Reflection;
6![](/Images/OutliningIndicators/None.gif)
7
namespace Clubank.Common
8
{
9
/// <summary>
10
/// 提供了获得枚举的Description特性的实用方法以及可用于设计器的TypeConverter类
11
/// </summary>
12
public class EnumConverter : System.ComponentModel.EnumConverter
13
{
14
protected System.Type myVal;
15![](/Images/OutliningIndicators/InBlock.gif)
16
/// <summary>
17
/// 获得枚举值的Description特性的值,一般是消息的搜索码
18
/// </summary>
19
/// <param name="value">要查找特性的枚举值</param>
20
/// <returns>返回查找到的Description特性的值,如果没有,就返回.ToString()</returns>
21
public static string GetEnumDescription(Enum value)
22
{
23
FieldInfo fi = value.GetType().GetField(value.ToString());
24
DescriptionAttribute[] attributes =
25
(DescriptionAttribute[])fi.GetCustomAttributes(
26
typeof(DescriptionAttribute), false);
27
return (attributes.Length > 0) ? attributes[0].Description : value.ToString();
28
}
29![](/Images/OutliningIndicators/InBlock.gif)
30
/// <summary>
31
/// 根据特定的枚举值名称获得枚举值的Description特性的值
32
/// </summary>
33
/// <param name="value">枚举类型</param>
34
/// <param name="name">枚举值的名称</param>
35
/// <returns>返回查找到的Description特性的值,如果没有,就返回.ToString()</returns>
36
public static string GetEnumDescription(System.Type value, string name)
37
{
38
FieldInfo fi = value.GetField(name);
39
DescriptionAttribute[] attributes =
40
(DescriptionAttribute[])fi.GetCustomAttributes(
41
typeof(DescriptionAttribute), false);
42
return (attributes.Length > 0) ? attributes[0].Description : name;
43
}
44![](/Images/OutliningIndicators/InBlock.gif)
45
/// <summary>
46
/// 基于Description特性或者枚举值名称获得具体的枚举值
47
/// </summary>
48
/// <param name="value">枚举类型</param>
49
/// <param name="description">Description特性值或者元素的名称</param>
50
/// <returns>返回枚举值。如果没找到,返回传入的Description值</returns>
51
public static object GetEnumValue(System.Type value, string description)
52
{
53
FieldInfo[] fis = value.GetFields();
54
foreach (FieldInfo fi in fis)
55
{
56
DescriptionAttribute[] attributes =
57
(DescriptionAttribute[])fi.GetCustomAttributes(
58
typeof(DescriptionAttribute), false);
59
if (attributes.Length > 0)
60
{
61
if (attributes[0].Description == description)
62
{
63
return fi.GetValue(fi.Name);
64
}
65
}
66
if (fi.Name == description)
67
{
68
return fi.GetValue(fi.Name);
69
}
70
}
71
return description;
72
}
73![](/Images/OutliningIndicators/InBlock.gif)
74
public EnumConverter(System.Type type)
75
: base(type.GetType())
76
{
77
myVal = type;
78
}
79![](/Images/OutliningIndicators/InBlock.gif)
80
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destinationType)
81
{
82
if (value is Enum && destinationType == typeof(string))
83
{
84
return GetEnumDescription((Enum)value);
85
}
86
if (value is string && destinationType == typeof(string))
87
{
88
return GetEnumDescription(myVal, (string)value);
89
}
90
return base.ConvertTo(context, culture, value, destinationType);
91
}
92![](/Images/OutliningIndicators/InBlock.gif)
93
public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
94
{
95
if (value is string)
96
{
97
return GetEnumValue(myVal, (string)value);
98
}
99
if (value is Enum)
100
{
101
return GetEnumDescription((Enum)value);
102
}
103
return base.ConvertFrom(context, culture, value);
104
}
105![](/Images/OutliningIndicators/InBlock.gif)
106
public override bool GetPropertiesSupported(ITypeDescriptorContext context)
107
{
108
return true;
109
}
110![](/Images/OutliningIndicators/InBlock.gif)
111
public override TypeConverter.StandardValuesCollection GetStandardValues(ITypeDescriptorContext context)
112
{
113
ArrayList values = new ArrayList();
114
FieldInfo[] fis = myVal.GetFields();
115
foreach (FieldInfo fi in fis)
116
{
117
DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes(
118
typeof(DescriptionAttribute), false);
119
if (attributes.Length > 0)
120
values.Add(fi.GetValue(fi.Name));
121
}
122
return new TypeConverter.StandardValuesCollection(values);
123
}
124![](/Images/OutliningIndicators/InBlock.gif)
125
}
126
}
127![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
2
![](/Images/OutliningIndicators/None.gif)
3
![](/Images/OutliningIndicators/None.gif)
4
![](/Images/OutliningIndicators/None.gif)
5
![](/Images/OutliningIndicators/None.gif)
6
![](/Images/OutliningIndicators/None.gif)
7
![](/Images/OutliningIndicators/None.gif)
8
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
9
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
10
![](/Images/OutliningIndicators/InBlock.gif)
11
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
12
![](/Images/OutliningIndicators/InBlock.gif)
13
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
14
![](/Images/OutliningIndicators/InBlock.gif)
15
![](/Images/OutliningIndicators/InBlock.gif)
16
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
17
![](/Images/OutliningIndicators/InBlock.gif)
18
![](/Images/OutliningIndicators/InBlock.gif)
19
![](/Images/OutliningIndicators/InBlock.gif)
20
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
21
![](/Images/OutliningIndicators/InBlock.gif)
22
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
23
![](/Images/OutliningIndicators/InBlock.gif)
24
![](/Images/OutliningIndicators/InBlock.gif)
25
![](/Images/OutliningIndicators/InBlock.gif)
26
![](/Images/OutliningIndicators/InBlock.gif)
27
![](/Images/OutliningIndicators/InBlock.gif)
28
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
29
![](/Images/OutliningIndicators/InBlock.gif)
30
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
31
![](/Images/OutliningIndicators/InBlock.gif)
32
![](/Images/OutliningIndicators/InBlock.gif)
33
![](/Images/OutliningIndicators/InBlock.gif)
34
![](/Images/OutliningIndicators/InBlock.gif)
35
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
36
![](/Images/OutliningIndicators/InBlock.gif)
37
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
38
![](/Images/OutliningIndicators/InBlock.gif)
39
![](/Images/OutliningIndicators/InBlock.gif)
40
![](/Images/OutliningIndicators/InBlock.gif)
41
![](/Images/OutliningIndicators/InBlock.gif)
42
![](/Images/OutliningIndicators/InBlock.gif)
43
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
44
![](/Images/OutliningIndicators/InBlock.gif)
45
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
46
![](/Images/OutliningIndicators/InBlock.gif)
47
![](/Images/OutliningIndicators/InBlock.gif)
48
![](/Images/OutliningIndicators/InBlock.gif)
49
![](/Images/OutliningIndicators/InBlock.gif)
50
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
51
![](/Images/OutliningIndicators/InBlock.gif)
52
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
53
![](/Images/OutliningIndicators/InBlock.gif)
54
![](/Images/OutliningIndicators/InBlock.gif)
55
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
56
![](/Images/OutliningIndicators/InBlock.gif)
57
![](/Images/OutliningIndicators/InBlock.gif)
58
![](/Images/OutliningIndicators/InBlock.gif)
59
![](/Images/OutliningIndicators/InBlock.gif)
60
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
61
![](/Images/OutliningIndicators/InBlock.gif)
62
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
63
![](/Images/OutliningIndicators/InBlock.gif)
64
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
65
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
66
![](/Images/OutliningIndicators/InBlock.gif)
67
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
68
![](/Images/OutliningIndicators/InBlock.gif)
69
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
70
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
71
![](/Images/OutliningIndicators/InBlock.gif)
72
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
73
![](/Images/OutliningIndicators/InBlock.gif)
74
![](/Images/OutliningIndicators/InBlock.gif)
75
![](/Images/OutliningIndicators/InBlock.gif)
76
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
77
![](/Images/OutliningIndicators/InBlock.gif)
78
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
79
![](/Images/OutliningIndicators/InBlock.gif)
80
![](/Images/OutliningIndicators/InBlock.gif)
81
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
82
![](/Images/OutliningIndicators/InBlock.gif)
83
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
84
![](/Images/OutliningIndicators/InBlock.gif)
85
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
86
![](/Images/OutliningIndicators/InBlock.gif)
87
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
88
![](/Images/OutliningIndicators/InBlock.gif)
89
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
90
![](/Images/OutliningIndicators/InBlock.gif)
91
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
92
![](/Images/OutliningIndicators/InBlock.gif)
93
![](/Images/OutliningIndicators/InBlock.gif)
94
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
95
![](/Images/OutliningIndicators/InBlock.gif)
96
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
97
![](/Images/OutliningIndicators/InBlock.gif)
98
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
99
![](/Images/OutliningIndicators/InBlock.gif)
100
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
101
![](/Images/OutliningIndicators/InBlock.gif)
102
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
103
![](/Images/OutliningIndicators/InBlock.gif)
104
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
105
![](/Images/OutliningIndicators/InBlock.gif)
106
![](/Images/OutliningIndicators/InBlock.gif)
107
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
108
![](/Images/OutliningIndicators/InBlock.gif)
109
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
110
![](/Images/OutliningIndicators/InBlock.gif)
111
![](/Images/OutliningIndicators/InBlock.gif)
112
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
113
![](/Images/OutliningIndicators/InBlock.gif)
114
![](/Images/OutliningIndicators/InBlock.gif)
115
![](/Images/OutliningIndicators/InBlock.gif)
116
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
117
![](/Images/OutliningIndicators/InBlock.gif)
118
![](/Images/OutliningIndicators/InBlock.gif)
119
![](/Images/OutliningIndicators/InBlock.gif)
120
![](/Images/OutliningIndicators/InBlock.gif)
121
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
122
![](/Images/OutliningIndicators/InBlock.gif)
123
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
124
![](/Images/OutliningIndicators/InBlock.gif)
125
![](/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
126
![](/Images/OutliningIndicators/ExpandedBlockEnd.gif)
127
![](/Images/OutliningIndicators/None.gif)