介绍一个.NET枚举共用类
2016-02-18 00:00
651 查看
using System; using System.ComponentModel; using System.Reflection; namespace Common { /**//// <summary> /// 枚举帮助类 /// </summary> public static class EnumHelper { private static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo) { if (fieldInfo != null) { return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false); } return null; } /**//// <summary> ///判断枚举是否包括枚举常数名称 /// </summary> /// <typeparam name="T">枚举</typeparam> /// <param name="enumName">枚举常数名称</param> /// <returns>是否包括枚举常数名称</returns> public static bool CheckedContainEnumName<T>(string enumName) where T : struct, IConvertible { bool _result = false; if (typeof(T).IsEnum) { string[] _enumnName = Enum.GetNames(typeof(T)); if (_enumnName != null) { for (int i = 0; i < _enumnName.Length; i++) { if (string.Compare(_enumnName[i], enumName, true) == 0) { _result = true; break; } } } } return _result; } /**//// <summary> /// 从枚举中获取Description /// </summary> /// <param name="targetEnum">需要获取枚举描述的枚举</param> /// <returns>描述内容</returns> public static string GetDescription(this Enum targetEnum) { string _description = string.Empty; FieldInfo _fieldInfo = targetEnum.GetType().GetField(targetEnum.ToString()); DescriptionAttribute[] _attributes = _fieldInfo.GetDescriptAttr(); if (_attributes != null && _attributes.Length > 0) _description = _attributes[0].Description; else _description = targetEnum.ToString(); return _description; } /**//// <summary> /// 根据Description获取枚举 /// </summary> /// <typeparam name="T">枚举类型</typeparam> /// <param name="description">枚举描述</param> /// <returns>枚举</returns> public static T ParseEnumDescription<T>(this string description, T defaultValue) where T : struct, IConvertible { if (typeof(T).IsEnum) { Type _type = typeof(T); foreach (FieldInfo field in _type.GetFields()) { DescriptionAttribute[] _description = field.GetDescriptAttr(); if (_description != null && _description.Length > 0) { if (string.Compare(_description[0].Description, description, true) == 0) { defaultValue = (T)field.GetValue(null); break; } } else { if (string.Compare(field.Name, description, true) == 0) { defaultValue = (T)field.GetValue(null); break; } } } } return defaultValue; } /**//// <summary> /// 将枚举常数名称转换成枚举 /// </summary> /// <typeparam name="T">枚举</typeparam> /// <param name="enumName">枚举常数名称</param> /// <returns></returns> public static T ParseEnumName<T>(this string enumName) where T : struct, IConvertible { return (T)Enum.Parse(typeof(T), enumName, true); } } }
调用实例
public enum AreaMode { NONE, CITY, TOWN, ROAD, CITYTOWN, TOWNROAD, CITYROAD, ALL } public class EnumHelperTests { public void CheckedContainEnumNameTest() { EnumHelper.CheckedContainEnumName<AreaMode>("none"); } public void GetDescriptionTest() { AreaMode.NONE.GetDescription(); } public void ParseEnumDescriptionTest() { EnumHelper.ParseEnumDescription<AreaMode>("NONE", AreaMode.CITYTOWN); } public void ParseEnumNameTest() { EnumHelper.ParseEnumName<AreaMode>("ALL"); } }
参考资料:介绍一个.NET枚举共用类 http://www.studyofnet.com/news/1129.html
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 星外ASP.Net的安全设置相关说明
- C#、ASP.NET通用扩展工具类之TypeParse
- 实现ASP.NET无刷新下载并提示下载完成的开发思路
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#编程中枚举类型的使用教程
- 枚举的用法详细总结
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- 程序中常用的种代码
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- ASP.NET页面间的传值的几种方法
- 入侵ASP.net网站的经验附利用代码
- 盘点PHP和ASP.NET的10大对比!
- PHP中Enum(枚举)用法实例详解
- asp.net OleDbCommand 的用法
- jquery调用asp.net 页面后台的实现代码
- asp.net中XML如何做增删改查操作
- asp.net数据验证控件
- asp.net中的check与uncheck关键字用法解析
- ASP.NET MVC 4 捆绑和缩小实例介绍