.NET中对枚举的操作
类别:编程学习 浏览量:446
时间:2015-12-28 .NET中对枚举的操作
.NET中对枚举的操作下面介绍一个.NET枚举共用类,实现对枚举常用的操作
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");
}
}
您可能感兴趣
- dropdownlist绑定枚举值
- .NET获取枚举值的描述
- .NET中对枚举的操作
- C#enum枚举
- 结构、枚举和数组的区别
- 吐槽完《弧光大作战》之后,我们和设计师聊了聊魔兽首款手游的立项初衷和未来(吐槽完弧光大作战之后)
- 魔兽争霸3自定义战役少年杰雷 2(魔兽争霸3自定义战役少年杰雷)
- 今日菜价 芥兰涨幅最高 1.33 ,花菜降幅最高 3.10(今日菜价芥兰涨幅最高)
- 今日菜价 椰菜涨幅最高 3.25 ,水空心菜降幅最高 2.58(今日菜价椰菜涨幅最高)
- 今日菜价 红三鱼涨幅最高 4.41 ,黄鳝降幅最高 5.06(红三鱼涨幅最高)
- 今日菜价 西生菜涨幅最高 6.19 ,生菜降幅最高 5.38(西生菜涨幅最高)
热门推荐
- python中怎么实现登录程序(详解Python用户登录接口的方法)
- 云服务器linux图形化(linux云服务器如何扩容?)
- django 获取请求参数(深入理解Django-Signals信号量)
- tomcat与eclipse配置运行(Tomcat配置及如何在Eclipse中启动)
- js怎么防抖(JS防抖节流函数的实现与使用场景)
- springboot内置tomcat启动过程(Tomcat启动springboot项目war包报错:启动子级时出错的问题)
- css导航条怎么做(CSS实现导航条Tab切换的三种方法介绍)
- apache和php如何配置(Apache2与PHP5 for WinXP简单配置技巧)
- php如何获取当前日期(php实现获取近几日、月时间示例)
- php实现无cookie的session(php实现多站点共用session实现单点登录的方法详解)