65 lines
2.2 KiB
C#
65 lines
2.2 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.ComponentModel;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
|
||
namespace IRaCIS.Core.Infrastructure.Extention
|
||
{
|
||
public static class EnumToSelectExtension
|
||
{
|
||
/// <summary>
|
||
/// 将枚举转换成字典(枚举,自定义描述)
|
||
/// </summary>
|
||
/// <typeparam name="TEnum"></typeparam>
|
||
/// <param name="exceptList">需要排除的枚举</param>
|
||
/// <returns></returns>
|
||
public static Dictionary<object, string> ToSelect<TEnum>( params TEnum[] exceptList) where TEnum : struct, Enum
|
||
{
|
||
var type = typeof(TEnum);
|
||
var dict = new Dictionary<object, string>();
|
||
foreach (var value in Enum.GetValues<TEnum>())
|
||
//foreach (var value in type.GetEnumValues())
|
||
{
|
||
var attr = type.GetField(value.ToString())
|
||
.GetCustomAttribute<DescriptionAttribute>();
|
||
if (attr is null || exceptList.Contains(value)) continue;
|
||
|
||
var key = type.GetFields().FirstOrDefault(t=>t.Name== value.ToString()).GetRawConstantValue();
|
||
dict[key] = attr.Description;
|
||
}
|
||
return dict;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 扩展方法,获得枚举的Description
|
||
/// </summary>
|
||
/// <param name="value">枚举值</param>
|
||
/// <param name="nameInstead">当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用</param>
|
||
/// <returns>枚举的Description</returns>
|
||
public static string GetDescription(this Enum value, Boolean nameInstead = true)
|
||
{
|
||
Type type = value.GetType();
|
||
string name = Enum.GetName(type, value);
|
||
if (name == null)
|
||
{
|
||
return null;
|
||
}
|
||
|
||
FieldInfo field = type.GetField(name);
|
||
DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
|
||
|
||
if (attribute == null && nameInstead == true)
|
||
{
|
||
return name;
|
||
}
|
||
return attribute?.Description;
|
||
}
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
}
|