using System.Collections.Concurrent; using System.ComponentModel; using System.Reflection; using JNPF.Common.Extension; namespace Tnb.WarehouseMgr.Entities.Consts { public class GenericEnumDicionary where T : Enum { private static string tn = typeof(T).Name; private static ConcurrentDictionary> enumDescMap = new(); private static ConcurrentDictionary enumMemberMap = new(); static GenericEnumDicionary() { enumMemberMap.GetOrAdd(tn, f => typeof(T).GetFields(BindingFlags.Public | BindingFlags.Static)); if (enumMemberMap[tn]?.All(f => f.GetCustomAttribute() != 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; } } }