/// <summary>
/// 枚举帮助类
/// </summary>
public static class EnumHelper
{
/// <summary>
/// 获取枚举注释
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="e">枚举值</param>
/// <returns></returns>
public static string ToComment<T>(this T e) where T : System.Enum
{
var t = typeof(T);
//if (!t.IsEnum) return null;
var name = t.GetEnumName(e);
var fieldInfos = t.GetFields();
foreach (var fieldInfo in fieldInfos)
{
if (fieldInfo.Name == name)
{
var attr = fieldInfo.GetCustomAttributes(typeof(EnumNameAttribute), false).FirstOrDefault();
if (attr != null)
{
return ((EnumNameAttribute)attr).Comment;
}
}
}
return null;
}
/// <summary>
/// 尝试通过注释获取枚举值
/// </summary>
/// <typeparam name="T">转换枚举类型</typeparam>
/// <param name="comment">注释</param>
/// <param name="value">枚举值</param>
/// <returns></returns>
public static bool TryCommentToEnum<T>(string comment, out T value) where T : System.Enum
{
var t = typeof(T);
//if (!t.IsEnum)
//{
// value = default(T);
// return false;
//};
var fiList = t.GetFields();
foreach (var item in fiList)
{
var attr = item.GetCustomAttributes(typeof(EnumNameAttribute), false).FirstOrDefault();
if (attr != null)
{
if (((EnumNameAttribute)attr).Comment == comment)
{
value = (T)t.GetField(item.Name).GetValue(t);
return true;
}
}
}
value = default(T);
return false;
}
}
[AttributeUsage(AttributeTargets.Field, AllowMultiple = false, Inherited = false)]
public class EnumNameAttribute : Attribute
{
/// <summary>
/// 说明
/// </summary>
public string Comment { get; }
public EnumNameAttribute(string comment)
{
Comment = comment;
}
}
/// <summary>
/// 枚举项数据
/// </summary>
public class EnumItem<T>
{
/// <summary>
/// 枚举名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 枚举值
/// </summary>
public T Value { get; set; }
/// <summary>
/// 枚举注释
/// </summary>
public string Comment { get; set; }
public EnumItem()
{
Name = "";
Comment = "";
Value = default(T);
}
}