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(this EnumModel model, string name)
where T : struct
{
return model.Items
.Where(it => it.Name.Equals(name, StringComparison.OrdinalIgnoreCase))
.Select(it => it.Enum)
.FirstOrDefault();
}
///
/// 获取自定义特性
///
///
///
///
///
public static TAttribute GetCustomAttribute(this TEnum @enum)
where TEnum : struct
where TAttribute : Attribute
{
return typeof(TEnum).GetMember(@enum.ToString())[0].GetCustomAttribute();
}
}
}