From 1b84c97dd1cf5a746c5bbb185a0b7400b7f5ca24 Mon Sep 17 00:00:00 2001
From: sunpengfei <i@angelzzz.com>
Date: 星期五, 15 八月 2025 10:08:40 +0800
Subject: [PATCH] pref:优化

---
 FlexJobApi.Core/Utils/EnumUtils/EnumUtils.cs |   83 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 83 insertions(+), 0 deletions(-)

diff --git a/FlexJobApi.Core/Utils/EnumUtils/EnumUtils.cs b/FlexJobApi.Core/Utils/EnumUtils/EnumUtils.cs
index 2f17914..87302ab 100644
--- a/FlexJobApi.Core/Utils/EnumUtils/EnumUtils.cs
+++ b/FlexJobApi.Core/Utils/EnumUtils/EnumUtils.cs
@@ -1,13 +1,51 @@
 锘縰sing System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
 using System.Text;
 using System.Threading.Tasks;
 
 namespace FlexJobApi.Core
 {
+    /// <summary>
+    /// 鏋氫妇宸ュ叿
+    /// </summary>
     public static class EnumUtils
     {
+        /// <summary>
+        /// 鑾峰彇妯″瀷
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <returns></returns>
+        public static async Task<EnumModel<T>> GetModel<T>()
+            where T : struct
+        {
+            var type = typeof(T);
+            var model = new EnumModel<T>();
+            var xmlDoc = await XmlDocUtils.GetXmlDocAsync();
+            var xmlDocMember = await XmlDocUtils.GetXmlDocMemberAsync(type, xmlDoc);
+            model.Name = type.Name;
+            model.Description = xmlDocMember?.Summary;
+
+            foreach (var enumValue in Enum.GetValues(type))
+            {
+                var item = new EnumModelItem<T>();
+                item.Name = enumValue.ToString();
+                item.Value = (int)enumValue;
+                item.Enum = (T)enumValue;
+                var enumMember = type.GetMember(enumValue.ToString()).FirstOrDefault();
+                var enumXmlDocMember = await XmlDocUtils.GetXmlDocMemberAsync(enumMember, xmlDoc);
+                item.Description = enumXmlDocMember?.Summary;
+                model.Items.Add(item);
+            }
+            return model;
+        }
+
+        /// <summary>
+        /// 鑾峰彇妯″瀷
+        /// </summary>
+        /// <param name="type"></param>
+        /// <returns></returns>
         public static async Task<EnumModel> GetModel(this Type type)
         {
             var model = new EnumModel();
@@ -28,5 +66,50 @@
             }
             return model;
         }
+
+        /// <summary>
+        /// 鑾峰彇鎻忚堪
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="model"></param>
+        /// <param name="t"></param>
+        /// <returns></returns>
+        public static string GetDescription<T>(this EnumModel<T> model, T t)
+            where T : struct
+        {
+            return model.Items
+                .Where(it => it.Enum.Equals(t))
+                .Select(it => it.Description)
+                .FirstOrDefault();
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏋氫妇
+        /// </summary>
+        /// <typeparam name="T"></typeparam>
+        /// <param name="model"></param>
+        /// <param name="name"></param>
+        /// <returns></returns>
+        public static T GetEnum<T>(string name)
+            where T : struct, Enum
+        {
+            name = Enum.GetNames<T>().FirstOrDefault(it => it.Equals(name, StringComparison.OrdinalIgnoreCase));
+            return Enum.Parse<T>(name);
+        }
+
+        /// <summary>
+        /// 鑾峰彇鑷畾涔夌壒鎬�
+        /// </summary>
+        /// <typeparam name="TEnum"></typeparam>
+        /// <typeparam name="TAttribute"></typeparam>
+        /// <param name="enum"></param>
+        /// <returns></returns>
+        public static TAttribute GetCustomAttribute<TEnum, TAttribute>(this TEnum @enum)
+            where TEnum : struct
+            where TAttribute : Attribute
+        {
+
+            return typeof(TEnum).GetMember(@enum.ToString())[0].GetCustomAttribute<TAttribute>();
+        }
     }
 }

--
Gitblit v1.9.1