前言
枚举也是在开发过程中经常要用到的一种数据类型。那么,下面就对枚举的一些扩展方法进行介绍。
第一、提出疑问。
先定义一个枚举,代码如下:
public enum PhoneEnum
{
[Description("安卓")]
Android=111,
[Description("苹果")]
Ios=100,
}
1、页面需要一个下拉,显示枚举的项,该怎么办?
2、页面需要一个下拉,显示枚举的描述,该怎么办?
3、从一个项中,显示枚举的描述,该怎么办?
4、把枚举中的项,处理成列表List,该怎么办?
5、枚举的项转换成字典Dictionary,该怎么办?
6、枚举的描述转换成字典Dictionary,该怎么办?
第二、有了上面的问题,下面就一一实现吧!
第一个问题的扩展方法,代码如下:
public static List<SelectListItem> ToListItem<T>()
{
List<SelectListItem> li = new List<SelectListItem>();
foreach (int s in Enum.GetValues(typeof(T)))
{
li.Add(new SelectListItem
{
Value = s.ToString(),
Text = Enum.GetName(typeof(T), s)
}
);
}
return li;
}
实现代码如下:
ViewData["enum"] = ExtendHelper.ToListItem<PhoneEnum>();
第二个问题的扩展方法,代码如下:
public static List<SelectListItem> ToListDescription(this Enum eEnum)
{
var list = (from Enum d in Enum.GetValues(eEnum.GetType())
select new SelectListItem
{
Value =
((int) Enum.Parse(eEnum.GetType(), Enum.GetName(eEnum.GetType(), d))).
ToString(),
Text = d.ToDescriptionName() //第二个问题的实现,需要第三个问题的扩展方法的支持
}).ToList();
return list;
}
实现代码如下:
ViewData["enumDistion"] = ExtendHelper.ToListDescription(PhoneEnum.Ios);(PhoneEnum.Ios是枚举中随便一个项,扩展方法中会根据这个项找到这个枚举,然后全部列出)
第三个问题的扩展方法,代码如下:
public static string ToDescriptionName(this Enum eEnum)
{
var type = eEnum.GetType();
var menInfo = type.GetMember(eEnum.ToString());
if (menInfo.Length > 0)
{
var attrs = menInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (attrs.Length > 0)
{
return ((DescriptionAttribute)attrs[0]).Description;
}
}
return eEnum.ToString();
}
实现代码如下:
ViewData["enumDis"] = PhoneEnum.Ios.ToDescriptionName();