Files
tnb.server/WarehouseMgr/Tnb.WarehouseMgr.Entities/Consts/GenericEnumDicionary.cs
2023-09-05 15:47:52 +08:00

36 lines
1.2 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using JNPF.Common.Extension;
using Spire.Pdf.Widget;
using Tnb.WarehouseMgr.Entities.Enums;
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;
}
}
}