| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Linq; |
| | | using System.Reflection; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | |
| | |
| | | /// </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> |
| | |
| | | } |
| | | 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>(); |
| | | } |
| | | } |
| | | } |