枚举定义:
[EnumDescription("订单、订单中的产品、产品项的状态。"
)]
public
enum
OrderStateEnum
{
[EnumDescription("未开始"
)]
Ready = 0,
[EnumDescription("进行中"
)]
Processing,
[EnumDescription("等待中"
)]
Waiting,
[EnumDescription("取消"
)]
Canceled,
[EnumDescription("完成"
)]
Finished
}
代码访问:
0、获得枚举类型的文字描述
string
txt = EnumDescription.GetEnumText(typeof
(OrderStateEnum));
1、获得某个枚举值的文字描述:
string
txt = EnumDescription.GetFieldText(OrderStateEnum.Processing)
2、获得枚举中各个字段的定义数组:
EnumDescription[] des = EnumDescription.GetFieldTexts(typeof
(OrderStateEnum))
如果需要排序,通过他的另一个重载
public
static
EnumDescription[] GetFieldTexts( Type enumType, SortType sortType )
3、绑定到下拉框:
comboBox1.DataSource = EnumDescription.GetFieldTexts(typeof
(OrderStateEnum));
comboBox1.ValueMember = "EnumValue"
;
comboBox1.DisplayMember = "EnumDisplayText"
;
comboBox1.SelectedValue = (int
)OrderStateEnum.Finished; //选中值
EnumDisplayText.cs 源码
今天,发现扩展一下Enum的方法更好,不过就是只能C#3.0才可以使用扩展方法。
1。定义enum
using System;
using System.ComponentModel;
public enum TimeOfDay
{
[Description("上午")]
Moning = 0,
[Description("中午")]
Afternoon = 1,
[Description("晚上")]
Evening = 2,
};
2.定义扩展:
/// <summary>
/// 获取描述信息
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static string description(this Enum en)
{
Type type = en.GetType(); MemberInfo[] memInfo = type.GetMember(en.ToString());
if (memInfo != null && memInfo.Length > 0) {
object[] attrs = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
if (attrs != null && attrs.Length > 0)
return ((DescriptionAttribute)attrs[0]).Description;
}
return en.ToString();
}
这样子就可以直接用方法:.description()来获取描述信息了。没有描述信息,返回en.ToString()。