149 lines
5.1 KiB
C#
149 lines
5.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.ComponentModel;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Linq;
|
|
using System.Reflection;
|
|
|
|
namespace Hncore.Infrastructure.Extension
|
|
{
|
|
public static class EnumExtension
|
|
{
|
|
public static Dictionary<int, string> ToDictionary<T>()
|
|
{
|
|
Dictionary<int, string> dic = new Dictionary<int, string>();
|
|
string namestr = "";
|
|
foreach (var e in Enum.GetValues(typeof(T)))
|
|
{
|
|
namestr = "";
|
|
|
|
object[] objArrDisplay = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DisplayAttribute), true);//Display
|
|
if (objArrDisplay.Any())
|
|
{
|
|
var da = objArrDisplay[0] as DisplayAttribute;
|
|
namestr = da.Name;
|
|
}
|
|
else
|
|
{
|
|
object[] objArrDescription = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);//Description
|
|
namestr = objArrDescription.Any() ? (objArrDescription[0] as DescriptionAttribute).Description : e.ToString();
|
|
}
|
|
int value = Convert.ToInt32(e);
|
|
|
|
|
|
|
|
// string str = item.GetDescription();
|
|
// int value = (int) item;
|
|
|
|
dic.Add(value, namestr);
|
|
}
|
|
|
|
return dic;
|
|
}
|
|
#region 获取枚举的相关信息的集合
|
|
/// <summary>
|
|
/// 获取枚举的相关信息的集合
|
|
/// </summary>
|
|
/// <typeparam name="T"></typeparam>
|
|
/// <returns></returns>
|
|
public static List<EnumInfo> EnumToList<T>()
|
|
{
|
|
var list = new List<EnumInfo>();
|
|
foreach (var e in Enum.GetValues(typeof(T)))
|
|
{
|
|
var m = new EnumInfo();
|
|
object[] objArrDisplay = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DisplayAttribute), true);//Display
|
|
if (objArrDisplay.Any())
|
|
{
|
|
var da = objArrDisplay[0] as DisplayAttribute;
|
|
m.Name = da.Name;
|
|
}
|
|
else
|
|
{
|
|
object[] objArrDescription = e.GetType().GetField(e.ToString()).GetCustomAttributes(typeof(DescriptionAttribute), true);//Description
|
|
m.Name = objArrDescription.Any() ? (objArrDescription[0] as DescriptionAttribute).Description : e.ToString();
|
|
}
|
|
m.Value = Convert.ToInt32(e);
|
|
list.Add(m);
|
|
}
|
|
return list;
|
|
}
|
|
public class EnumInfo
|
|
{
|
|
public string Name { set; get; }
|
|
|
|
public int Value { set; get; }
|
|
}
|
|
#endregion
|
|
public static string GetDisplayName<T>(T enumValue)
|
|
{
|
|
object[] objArrDisplay = enumValue.GetType().GetField(enumValue.ToString())
|
|
?.GetCustomAttributes(typeof(DisplayAttribute), true);//Display
|
|
if (objArrDisplay!=null&&objArrDisplay.Any())
|
|
{
|
|
var da = objArrDisplay[0] as DisplayAttribute;
|
|
return da?.Name;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取枚举上通过DisplayName、Description或Display柱注的名称
|
|
/// 优先级为DisplayName>Description>Display
|
|
/// </summary>
|
|
/// <param name="e">枚举值</param>
|
|
/// <returns>枚举名称</returns>
|
|
///
|
|
public static string GetEnumDisplayName(this Enum e)
|
|
{
|
|
try
|
|
{
|
|
Type t = e.GetType();
|
|
FieldInfo fi = t.GetField(Enum.GetName(t, e));
|
|
var dna = fi.GetCustomAttribute<DisplayNameAttribute>();
|
|
if (dna != null)
|
|
return dna.DisplayName;
|
|
var da = fi.GetCustomAttribute<DescriptionAttribute>();
|
|
if (da != null)
|
|
return da.Description;
|
|
var d = fi.GetCustomAttribute<DisplayAttribute>();
|
|
if (d != null)
|
|
return d.Name;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return "获取枚举"+e.GetType().FullName+"名称错误:"+ex.Message;
|
|
}
|
|
return "";
|
|
}
|
|
|
|
public static string ToHtmlSelectOptions<T>()
|
|
{
|
|
var dic = ToDictionary<T>();
|
|
|
|
string str = "";
|
|
|
|
foreach (var key in dic.Keys)
|
|
{
|
|
str += "<option value=\"" + key + "\">" + dic[key] + "</option>";
|
|
}
|
|
|
|
return str;
|
|
}
|
|
|
|
#region 判断值是否在枚举类型中存在
|
|
|
|
/// <summary>
|
|
/// 判断值是否在枚举中存在
|
|
/// </summary>
|
|
/// <param name="enumValue">需要判断的参数</param>
|
|
/// <param name="enumType">枚举类型</param>
|
|
/// <returns></returns>
|
|
public static bool IsExist(this int enumValue, Type enumType)
|
|
{
|
|
return Enum.IsDefined(enumType, enumValue);
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |