常用的工具类6-枚举类

public static class EnumHelper
{
/// <summary>
/// 枚举转换为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, int> EnumDictionary<T>()
{
Dictionary<string, int> dic = new Dictionary<string, int>();
if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);
foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);
dic.Add(key, val);
}
return dic;
}

/// <summary>
/// 枚举转换为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<int, string> EnumToDictionary<T>()
{
Dictionary<int, string> dic = new Dictionary<int, string>();
if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);
foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);
dic.Add(val, key);
}
return dic;
}

/// <summary>
/// 枚举的描述和Key转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, string> EnumKeyAndDescriptionToDictionary<T>()
{
Dictionary<string, string> dic = new Dictionary<string, string>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[key] = desc.Description;
}
}
}

return dic;
}

/// <summary>
/// 枚举的描述和Key转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, string> EnumDescriptionAndKeyToDictionary<T>()
{
Dictionary<string, string> dic = new Dictionary<string, string>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[desc.Description] = key;
}
}
}

return dic;
}

/// <summary>
/// 枚举的描述和Value转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<int, string> EnumValueAndDescriptionToDictionary<T>()
{
Dictionary<int, string> dic = new Dictionary<int, string>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);

FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[val] = desc.Description;
}
}
}

return dic;
}

/// <summary>
/// 枚举的描述和Value转为字典
/// </summary>
/// <typeparam name="T"></typeparam>
/// <returns></returns>
public static Dictionary<string, int> EnumDescriptionAndValueToDictionary<T>()
{
Dictionary<string, int> dic = new Dictionary<string, int>();

if (typeof(T) == typeof(Enum))
{
throw new ArgumentOutOfRangeException("T只能是Enum类型");
}

Type enumType = typeof(T);

foreach (string key in Enum.GetNames(enumType))
{
int val = (int)enumType.GetField(key).GetValue(null);

FieldInfo finfo = enumType.GetField(key);
object[] cAttr = finfo.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (cAttr.Length > 0)
{
DescriptionAttribute desc = cAttr[0] as DescriptionAttribute;
if (desc != null)
{
dic[desc.Description] = val;
}
}
}

return dic;
}

/// <summary>
/// 枚举描述
/// </summary>
/// <param name="e"></param>
/// <returns></returns>
public static String GetEnumDesc(Enum e)
{
FieldInfo fieldInfo = e.GetType().GetField(e.ToString());
if (fieldInfo != null)
{
DescriptionAttribute[] EnumAttributes = (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (EnumAttributes.Length > 0)
{
return EnumAttributes[0].Description;
}
}
return e.ToString();
}
}

public class EnumView<T>
{
private static Dictionary<int, string> s_DictCodeToText = null;
private static Dictionary<string, int> s_DictTextToCode = null;

static EnumView()
{
s_DictCodeToText = EnumHelper.EnumToDictionary<T>();
s_DictTextToCode = EnumHelper.EnumDictionary<T>();
}

private EnumView() { }

public static Dictionary<int, string> DictCodeToText { get { return s_DictCodeToText; } }
public static Dictionary<string, int> DictTextToCode { get { return s_DictTextToCode; } }

public static int GetCode(string text)
{
if (s_DictTextToCode.ContainsKey(text))
{
return s_DictTextToCode[text];
}
return int.MinValue;
}

public static string GetText(int code)
{
if (s_DictCodeToText.ContainsKey(code))
{
return s_DictCodeToText[code] ?? string.Empty;
}
return string.Empty;
}
}

public class EnumHelperEx
{

public static T ToEnum<T>(int value, T defaultT) where T : struct
{
var enumName = Enum.GetName(typeof(T), value);

return ToEnum<T>(enumName, defaultT);
}

public static T ToEnum<T>(string enumName, T defaultT) where T : struct
{
if (string.IsNullOrWhiteSpace(enumName))
{
return defaultT;
}

T result;

if (!Enum.TryParse<T>(enumName.Trim(), out result))
{
return defaultT;
}

if (Enum.IsDefined(typeof(T), result))
{
return result;
}

return defaultT;
}

}

时间: 2024-10-20 22:26:34

常用的工具类6-枚举类的相关文章

基本数据类型的包装类(wrapper class)、时间处理相关类、Math类、File类、枚举类

包装类(wrapper class) --基本数据类型对应的类统称为包装类(Wrapper Class).包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示: 基本数据类型 包装类 byte Byte short Short int Integer long Long float Float double Double boolean Boolean char Character 包装类的用途 --作为和基本数据类型对应的类类型存在,方便涉及到对象的操作. --包含每种基

java中的枚举类

枚举类(enum),与class和interface关键字地位相同. 枚举类是一个特殊的类,可以有自己的成员变量.方法.构造器,可以实现一个或多个接口.一个java源文件中只能有一个public的enum类. 枚举类终究不是普通类,它与普通类有什么区别呢? enum默认继承的是java.lang.Enum类,而不是Object类.enum类不能显式继承其他父类. 使用enum定义.非抽象的枚举类默认会使用final修饰,因此enum类不能被继承(不能派生子类). 枚举类的构造器只能使用priva

Java 之枚举类

在某些情况下,一个类的对象是有限而且是固定的,比如季节类,它只有4个对象.这种实例有限而且固定的类,在Java里被称为枚举类. 在早期,可能会直接使用简单的静态常量来表示枚举类,例如: public static final int SEASON_SPRING = 1; public static final int SEASON_SUMMER = 2; public static final int SEASON_FAIL = 3; public static final int SEASON

使用单元素枚举类实现单例模式

在上一篇文章<单例模式的终结者--setAccessible(true)>中介绍了传统单例模式的不足之处,虽然枚举类实现单例模式还没有被广泛采用,但<effective java>里面已经承认单元素枚举类是实现单例模式最好的方法了. 下面写个小demo示范一下,这是只有一个元素的枚举类,枚举类里面也可以写方法. package go.derek; public enum EnumSingleton { instance; public void doSomething(){ Sys

C# 遍历枚举类

framework 4.0 环境下 方法 定义枚举类 判断枚举类中是否存在,若存在则输出 例子: Defined.QrCode.QrCodeType type;//枚举类 if (!Enum.TryParse<Defined.QrCode.QrCodeType>( aa,out type)) { context.Response.Write("枚举类不存在"); return null; } framework 4.0 以下版本 定义哈希表或者list集合,然后验证集合中是

jdk1.5后枚举类的定义规则

转: http://blog.csdn.net/willcold/article/details/12844487 JDK1.5 新增的enum关键字用于定义枚举类 枚举类也是一种特殊形式的Java类. 枚举类和普通类的区别: 使用enum定义的枚举类默认继承了 java.lang.Enum类 枚举类的构造器只能使用private 访问控制符 枚举类的所有实例必须在枚举类中显式列出(, 分隔   ; 结尾). 列出的实例系统会自动添加public static final 修饰 枚举类的属性:

java中常用的工具类(二)

下面继续分享java中常用的一些工具类,希望给大家带来帮助! 1.FtpUtil Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71

Android常用的工具类

主要介绍总结的Android开发中常用的工具类,大部分同样适用于Java.目前包括HttpUtils.DownloadManagerPro.ShellUtils.PackageUtils.PreferencesUtils.JSONUtils.FileUtils.ResourceUtils.StringUtils.ParcelUtils.RandomUtils.ArrayUtils.ImageUtils.ListUtils.MapUtils.ObjectUtils.SerializeUtils.S

[C#] 常用工具类——文件操作类

/// <para> FilesUpload:工具方法:ASP.NET上传文件的方法</para> /// <para> FileExists:返回文件是否存在</para> /// <para> IsImgFilename:判断文件名是否为浏览器可以直接显示的图片文件名</para> /// <para> CopyFiles:复制指定目录的所有文件</para> /// <para> MoveFi

C#常用工具类——Excel操作类

/// 常用工具类——Excel操作类 /// <para> ------------------------------------------------</para> /// <para> CreateConnection:根据Excel文件路径和EXCEL驱动版本生成OleConnection对象实例</para> /// <para> ExecuteDataSet:执行一条SQL语句,返回一个DataSet对象</para>