浏览代码

优化枚举扩展

懒得勤快 2 年之前
父节点
当前提交
60cf947c7f

+ 1 - 1
Masuit.Tools.Abstractions/Masuit.Tools.Abstractions.csproj

@@ -3,7 +3,7 @@
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6;net7</TargetFrameworks>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>2.6.3</Version>
+        <Version>2.6.3.1</Version>
         <Authors>懒得勤快</Authors>
         <Description>新手友好的C#万能工具库,码数吐司库,Masuit.Tools基础公共库(适用于.NET4.6.1/.NET Standard2.0及以上项目),包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
             官网教程:https://tools.masuit.org

+ 15 - 16
Masuit.Tools.Abstractions/Systems/EnumExt.cs

@@ -15,8 +15,7 @@ namespace Masuit.Tools.Systems
     public static partial class EnumExt
     {
         private static readonly ConcurrentDictionary<Type, Dictionary<int, string>> EnumNameValueDict = new ConcurrentDictionary<Type, Dictionary<int, string>>();
-        private static readonly ConcurrentDictionary<Type, Dictionary<string, int>> EnumValueNameDict = new ConcurrentDictionary<Type, Dictionary<string, int>>();
-        private static ConcurrentDictionary<string, Type> _enumTypeDict;
+        private static NullableDictionary<string, Type> _enumTypeDict;
 
         /// <summary>
         /// 获取枚举对象Key与显示名称的字典
@@ -30,14 +29,7 @@ namespace Masuit.Tools.Systems
                 throw new Exception("给定的类型不是枚举类型");
             }
 
-            var names = EnumNameValueDict.ContainsKey(enumType) ? EnumNameValueDict[enumType] : new Dictionary<int, string>();
-            if (names.Count == 0)
-            {
-                names = GetDictionaryItems(enumType);
-                EnumNameValueDict[enumType] = names;
-            }
-
-            return names;
+            return EnumNameValueDict.GetOrAdd(enumType, _ => GetDictionaryItems(enumType));
         }
 
         private static Dictionary<int, string> GetDictionaryItems(Type enumType)
@@ -46,8 +38,7 @@ namespace Masuit.Tools.Systems
             var names = new Dictionary<int, string>(enumItems.Length);
             foreach (FieldInfo enumItem in enumItems)
             {
-                int intValue = (int)enumItem.GetValue(enumType);
-                names[intValue] = enumItem.Name;
+                names[(int)enumItem.GetValue(enumType)] = enumItem.Name;
             }
 
             return names;
@@ -62,7 +53,7 @@ namespace Masuit.Tools.Systems
         public static Type GetEnumType(this Assembly assembly, string typeName)
         {
             _enumTypeDict ??= LoadEnumTypeDict(assembly);
-            return _enumTypeDict.ContainsKey(typeName) ? _enumTypeDict[typeName] : null;
+            return _enumTypeDict[typeName];
         }
 
         /// <summary>
@@ -84,9 +75,9 @@ namespace Masuit.Tools.Systems
             return en.ToString();
         }
 
-        private static ConcurrentDictionary<string, Type> LoadEnumTypeDict(Assembly assembly)
+        private static NullableDictionary<string, Type> LoadEnumTypeDict(Assembly assembly)
         {
-            return new ConcurrentDictionary<string, Type>(assembly.GetTypes().Where(o => o.IsEnum).ToDictionary(o => o.Name, o => o));
+            return assembly.GetTypes().Where(o => o.IsEnum).ToDictionarySafety(o => o.Name, o => o);
         }
 
         /// <summary>
@@ -137,7 +128,10 @@ namespace Masuit.Tools.Systems
         public static IEnumerable<TEnum> Split<TEnum>(this TEnum value) where TEnum : Enum
         {
             var type = typeof(TEnum);
-            return Enum.IsDefined(type, value) ? new[] { value } : Enum.GetValues(type).Cast<TEnum>().Where(e => value.HasFlag(e));
+            return Enum.IsDefined(type, value) ? new[]
+            {
+                value
+            } : Enum.GetValues(type).Cast<TEnum>().Where(e => value.HasFlag(e));
         }
 
         /// <summary>
@@ -212,5 +206,10 @@ namespace Masuit.Tools.Systems
 
             return nvc;
         }
+
+        /// <summary>
+        /// 根据枚举成员获取自定义属性EnumDisplayNameAttribute的属性DisplayName
+        /// </summary>
+        public static Dictionary<string, int> GetDescriptionAndValue(this Type enumType) => Enum.GetValues(enumType).Cast<object>().ToDictionary(e => (e as Enum).GetDescription(), e => (int)e);
     }
 }

+ 1 - 1
Masuit.Tools.AspNetCore/Masuit.Tools.AspNetCore.csproj

@@ -18,7 +18,7 @@
         <Product>Masuit.Tools.AspNetCore</Product>
         <PackageId>Masuit.Tools.AspNetCore</PackageId>
         <LangVersion>latest</LangVersion>
-        <Version>1.2.3</Version>
+        <Version>1.2.3.1</Version>
         <RepositoryType></RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <FileVersion>1.1.9</FileVersion>

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -6,7 +6,7 @@
 官网教程:https://tools.masuit.org
 github:https://github.com/ldqk/Masuit.Tools
         </Description>
-        <Version>2.6.3</Version>
+        <Version>2.6.3.1</Version>
         <Copyright>Copyright © 懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
         <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>

+ 1 - 1
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -3,7 +3,7 @@
         <TargetFramework>netstandard2.0</TargetFramework>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>1.2.6.1</Version>
+        <Version>1.2.6.2</Version>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools.Excel导出库,支持一些简单数据的导出,支持图片列</Description>
         <Copyright>懒得勤快</Copyright>

+ 1 - 1
Masuit.Tools.Net45/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net45</id>
-    <version>2.6.2.10</version>
+    <version>2.6.3.1</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>

+ 1 - 1
Masuit.Tools/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net</id>
-    <version>2.6.2.10</version>
+    <version>2.6.3.1</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>