还是jhh0111昨天关于枚举的双语显示问题的帖子的问题,有不少人跟贴询问使用Attribute的实现,于是刚才乘午间休息实现了一个,这里share一下。$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
主要框架还是和枚举的多语言显示里一样,对Enum包装了一个DataSource,唯一不同的是里面的每一个Item的DisplayValue采用从Attribute读出,所以这里就不再贴出EnumDataSource代码了(请参考枚举的多语言显示),这里仅仅列出和上篇不同的地方:$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
1public string DisplayValue$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
2{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
3    get$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
4    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
5        Dictionary<CultureInfo, EnumItemDescriptionAttribute> disc =$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
6            EnumItemDescriptionAttribute.GetDisplayValues(_value, typeof(EnumType));$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
7        CultureInfo currentUICulute = Thread.CurrentThread.CurrentUICulture;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
8        if (disc.ContainsKey(currentUICulute))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
9            return disc[currentUICulute].Description;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
10        return _value.ToString();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
11    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
12}
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
这里取值是通过EnumItemDescriptionAttribute上的静态Helper方法提供,如果找到对应Culture的Attribute就应用,否则返回默认值(枚举的ToString)。$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
显然这里的静态方法是很重要的,通过它就可以访问枚举的额外信息了:$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  1///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  2///  Define the item of special enum used attribute, you can use it mulitple for multi-descript one enum item.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  3///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  4[AttributeUsage(AttributeTargets.Field, AllowMultiple=true)]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  5public class EnumItemDescriptionAttribute : Attribute$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  6{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  7    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  8    ///  A cache store, because accessing Attribute is according to reflection, it cost too much$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
  9    ///  So I add a cache, which based on special enum Type.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
10    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
11    private static readonly Dictionary<Type, Dictionary<object, Dictionary<CultureInfo, EnumItemDescriptionAttribute>>> _cache = $©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
12        new Dictionary<Type,Dictionary<object, Dictionary<CultureInfo, EnumItemDescriptionAttribute>>>();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
13    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
14    ///  the culture of Description$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
15    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
16    private CultureInfo _culture;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
17    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
18    ///  the description content.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
19    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
20    private string _description;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
21$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
22    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
23    ///  Constructor a new <see cref="EnumItemDescriptionAttribute"/> with special culture name and description.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
24    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
25    ///  <param name="cultureName">the name of special culture, like en-US, zh-CN etc.</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
26    ///  <param name="description">the content of Descroption</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
27    public EnumItemDescriptionAttribute(string cultureName, string description)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
28        : this(CultureInfo.GetCultureInfo(cultureName), description)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
29    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
30    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
31$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
32    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
33    ///  Constructor a new <see cref="EnumItemDescriptionAttribute"/> with special culture id and description.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
34    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
35    ///  <param name="cultureId">the ID of special culture, like 1033 etc.</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
36    ///  <param name="description">the content of Descroption</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
37    public EnumItemDescriptionAttribute(int cultureId, string description)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
38        : this(CultureInfo.GetCultureInfo(cultureId), description)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
39    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
40    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
41$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
42    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
43    ///  Internal constructor.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
44    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
45    ///  <param name="culture">special <see cref="CultureInfo"/></param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
46    ///  <param name="description">the content of Descroption</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
47    private EnumItemDescriptionAttribute(CultureInfo culture, string description)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
48    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
49        _culture = culture;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
50        _description = description;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
51    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
52$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
53    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
54    ///  Gets the <see cref="CultureInfo"/> for current decription.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
55    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
56    public CultureInfo Culture$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
57    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
58        get { return _culture; }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
59    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
60$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
61    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
62    ///  Gets the description content.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
63    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
64    public string Description$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
65    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
66        get { return _description; }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
67    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
68$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
69    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
70    ///  Gets all <see cref="EnumItemDescriptionAttribute"/>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
71    ///  for special enum value: <paramref name="value"/> and special enum type: <paramref name="enumType"/>.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
72    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
73    ///  <param name="value">the value of special enum</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
74    ///  <param name="enumType">the enum type of special enum</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
75    ///  <returns>All attributes attatched on special enum value.</returns>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
76    public static Dictionary<CultureInfo, EnumItemDescriptionAttribute> GetDisplayValues(object value, Type enumType)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
77    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
78        if (enumType == null || !enumType.IsEnum)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
79        {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
80            throw new NotSupportedException("enumType is not a Enum");$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
81        }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
82        if (value == null || !Enum.IsDefined(enumType, value))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
83        {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
84            throw new ArgumentException("value is not defined in " + enumType.FullName);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
85        }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
86$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
87        return GetDisplayValuesImp(value, enumType);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
88    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
89$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
90    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
91    ///  Gets the <see cref="EnumItemDescriptionAttribute"/> for special enum value: <paramref name="value"/>,$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
92    ///  special enum type: <paramref name="enumType"/> and special culture.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
93    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
94    ///  <param name="value">the value of special enum</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
95    ///  <param name="enumType">the enum type of special enum</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
96    ///  <param name="culture">special culture for item description.</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
97    ///  <returns>The attributes attatched on special enum value.</returns>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
98    public static string GetDisplayValue(object value, Type enumType, CultureInfo culture)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
99    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
100        if (enumType == null || !enumType.IsEnum)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
101        {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
102            throw new NotSupportedException("enumType is not a Enum");$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
103        }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
104        if (value == null || !Enum.IsDefined(enumType, value))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
105        {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
106            throw new ArgumentException("value is not defined in " + enumType.FullName);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
107        }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
108$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
109        if (culture == null)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
110            return value.ToString();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
111$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
112        Dictionary<CultureInfo, EnumItemDescriptionAttribute> disc = GetDisplayValuesImp(value, enumType);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
113        if (disc.ContainsKey(culture))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
114            return disc[culture].Description;$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
115        return value.ToString();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
116    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
117$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
118    ///  <summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
119    ///  Gets all <see cref="EnumItemDescriptionAttribute"/>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
120    ///  for special enum value: <paramref name="value"/> and special enum type: <paramref name="enumType"/>.$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
121    ///  </summary>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
122    ///  <param name="value">the value of special enum</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
123    ///  <param name="enumType">the enum type of special enum</param>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
124    ///  <returns>All attributes attatched on special enum value.</returns>$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
125    private static Dictionary<CultureInfo, EnumItemDescriptionAttribute> GetDisplayValuesImp(object value, Type enumType)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
126    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
127        if (!_cache.ContainsKey(enumType))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
128        {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
129            Dictionary<object, Dictionary<CultureInfo, EnumItemDescriptionAttribute>> displayValues =$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
130                new Dictionary<object, Dictionary<CultureInfo, EnumItemDescriptionAttribute>>();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
131            foreach (Enum item in Enum.GetValues(enumType))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
132            {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
133                Dictionary<CultureInfo, EnumItemDescriptionAttribute> descriptions =$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
134                    new Dictionary<CultureInfo, EnumItemDescriptionAttribute>();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
135                FieldInfo enumField = enumType.GetField(item.ToString());$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
136                if (enumField != null)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
137                {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
138                    foreach (EnumItemDescriptionAttribute desc$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
139                        in enumField.GetCustomAttributes(typeof(EnumItemDescriptionAttribute), true))$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
140                    {$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
141                        descriptions.Add(desc.Culture, desc);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
142                    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
143                }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
144                displayValues.Add(item, descriptions);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
145            }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
146            _cache.Add(enumType, displayValues);$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
147        }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
148$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
149        return _cache[enumType][value];$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
150    }$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
151}
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
使用示例如下:$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
1private void Form1_Load(object sender, EventArgs e)$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
2{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
3    this.comboBox1.DataSource = new EnumDataSource2<Sex>();$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
4    this.comboBox1.DisplayMember = "DisplayValue";$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
5    this.comboBox1.ValueMember = "Value";$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
6}$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
7$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
8public enum Sex$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
9{$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
10    [EnumItemDescription("zh-CN", "")]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
11    [EnumItemDescription("ja", "男性")]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
12    [EnumItemDescription("de", "Männliche")]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
13    Male,$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
14    [EnumItemDescription("zh-CN", "")]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
15    [EnumItemDescription("ja", "女性")]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
16    [EnumItemDescription("de", "Weibliche")]$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
17    Female$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
18}
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf
$©=Çø‘ŠÇwww.netcsharp.cn5ÍÙëÜ\êOòf