using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
namespace QYZH.InteractiveMagazine.Common.Extensions
{
///
/// 枚举扩展方法
///
public static class EnumExtension
{
///
/// 获取枚举的DescriptionAttribute描述
///
/// 枚举类型
/// 枚举值
/// 描述文本,如果没有DescriptionAttribute则返回枚举名称
public static string GetDescription(this T enumValue) where T : Enum
{
System.Reflection.FieldInfo? field = enumValue.GetType().GetField(enumValue.ToString());
if (field == null)
{
return enumValue.ToString();
}
var attribute = (DescriptionAttribute?)Attribute.GetCustomAttribute(
field, typeof(DescriptionAttribute));
return attribute?.Description ?? enumValue.ToString();
}
///
/// 获取枚举名称
///
/// 枚举类型
/// 枚举值
/// 枚举名称
public static string GetName(this T enumValue) where T : Enum
{
return enumValue.ToString();
}
///
/// 获取所有枚举名称列表
///
/// 枚举类型
/// 枚举名称列表
public static List GetNames() where T : Enum
{
return Enum.GetNames(typeof(T)).ToList();
}
///
/// 获取所有枚举描述列表
///
/// 枚举类型
/// 枚举描述列表
public static List GetDescriptions() where T : Enum
{
return Enum.GetValues(typeof(T))
.Cast()
.Select(e => e.GetDescription())
.ToList();
}
///
/// 将枚举转换为字典(名称,值)
///
/// 枚举类型
/// 枚举字典
public static Dictionary ToDictionary() where T : Enum
{
return Enum.GetValues(typeof(T))
.Cast()
.ToDictionary(e => e.GetDescription(), e => Convert.ToInt32(e));
}
}
}