using 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();
|
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;
|
}
|
|
/// <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>(this EnumModel<T> model, string name)
|
where T : struct
|
{
|
return model.Items
|
.Where(it => it.Name.Equals(name, StringComparison.OrdinalIgnoreCase))
|
.Select(it => it.Enum)
|
.FirstOrDefault();
|
}
|
|
/// <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>();
|
}
|
}
|
}
|