using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace FlexJobApi.Core { /// /// 枚举工具 /// public static class EnumUtils { /// /// 获取模型 /// /// /// public static async Task> GetModel() where T : struct { var type = typeof(T); var model = new EnumModel(); 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(); 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; } /// /// 获取模型 /// /// /// public static async Task GetModel(this Type type) { var model = new EnumModel(); 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(); item.Name = enumValue.ToString(); item.Value = (int)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; } /// /// 获取描述 /// /// /// /// /// public static string GetDescription(this EnumModel model, T t) where T : struct { return model.Items .Where(it => it.Enum.Equals(t)) .Select(it => it.Description) .FirstOrDefault(); } /// /// 获取枚举 /// /// /// /// /// public static T GetEnum(string name) where T : struct, Enum { name = Enum.GetNames().FirstOrDefault(it => it.Equals(name, StringComparison.OrdinalIgnoreCase)); return Enum.Parse(name); } /// /// 获取自定义特性 /// /// /// /// /// public static TAttribute GetCustomAttribute(this TEnum @enum) where TEnum : struct where TAttribute : Attribute { return typeof(TEnum).GetMember(@enum.ToString())[0].GetCustomAttribute(); } } }