29 lines
1.0 KiB
C#
29 lines
1.0 KiB
C#
using System.Collections.Concurrent;
|
|
using System.ComponentModel;
|
|
using System.Reflection;
|
|
using JNPF.Common.Extension;
|
|
|
|
namespace Tnb.WarehouseMgr.Entities.Consts
|
|
{
|
|
|
|
public class GenericEnumDicionary<T> where T : Enum
|
|
{
|
|
private static string tn = typeof(T).Name;
|
|
private static ConcurrentDictionary<string, Dictionary<int, string>> enumDescMap = new();
|
|
private static ConcurrentDictionary<string, FieldInfo[]?> enumMemberMap = new();
|
|
|
|
static GenericEnumDicionary()
|
|
{
|
|
enumMemberMap.GetOrAdd(tn, f => typeof(T).GetFields(BindingFlags.Public | BindingFlags.Static));
|
|
if (enumMemberMap[tn]?.All(f => f.GetCustomAttribute<DescriptionAttribute>() != null) ?? false)
|
|
{
|
|
enumDescMap.GetOrAdd(tn, dic => typeof(T).GetEnumDescDictionary());
|
|
}
|
|
}
|
|
public static string GetEnumDesc(int enumVal)
|
|
{
|
|
return enumDescMap.ContainsKey(tn) ? enumDescMap[tn]?[enumVal] ?? string.Empty : string.Empty;
|
|
}
|
|
}
|
|
}
|