Files
juipnet/Infrastructure/Hncore.Infrastructure/Extension/EnumExtension.cs
“wanyongkang” 40a40b6d36 忽略
2020-12-28 14:55:48 +08:00

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
}
}