using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel;
namespace ICSSoft.Common
{
public static class EnumHelper
{
#region 获取枚举注解
///
/// 判单枚举中是否包含该枚举描述
///
///
///
///
public static bool HasDescriptions(Type enumType,string desc)
{
//if (enumType != null && enumType.IsEnum)
//{
// FieldInfo[] fields = enumType.GetFields();
// for (int i = 1; i < fields.Length; ++i)
// {
// //object fieldValue = Enum.Parse(enumType, fields[i].Name);
// object[] attrs = fields[i].GetCustomAttributes(true);
// foreach (object attr in attrs)
// {
// if (typeof(DescriptionAttribute).IsAssignableFrom(attr.GetType()) && ((DescriptionAttribute)attr).Description.Equals(desc))
// {
// return true;
// }
// }
// }
//}
if (NewTransType.list.Contains(desc))
{
return true;
}
return false;
}
#endregion
#region 获取枚举注解DBValue
///
/// 判单枚举中是否包含该枚举描述
///
///
///
///
public static string GetDBValue(Type enumType, string desc)
{
if (enumType != null && enumType.IsEnum)
{
FieldInfo[] fields = enumType.GetFields();
for (int i = 1; i < fields.Length; ++i)
{
//object fieldValue = Enum.Parse(enumType, fields[i].Name);
object[] attrs = fields[i].GetCustomAttributes(true);
bool match = false;
foreach (object attr in attrs)
{
if (typeof(DescriptionAttribute).IsAssignableFrom(attr.GetType()) && ((DescriptionAttribute)attr).Description.Equals(desc))
{
match = true;
continue;
}
if (match) return ((ICSSoft.Common.DBValue)attr).Description;
}
}
}
return "";
}
#endregion
public static string GetDescription(this Enum em) where Attr : AttrDescription
{
Type enumType = em.GetType();
var name = Enum.GetName(enumType, em);
if (name == null)
return string.Empty;
object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(Attr), false);
if (objs == null || objs.Length == 0)
return string.Empty;
Attr attr = objs[0] as Attr;
return attr.Description;
}
public static string GetDescription(this Enum em)
{
Type enumType = em.GetType();
var name = Enum.GetName(enumType, em);
if (name == null)
return string.Empty;
object[] objs = enumType.GetField(name).GetCustomAttributes(typeof(System.ComponentModel.DescriptionAttribute), false);
if (objs == null || objs.Length == 0)
return string.Empty;
System.ComponentModel.DescriptionAttribute attr = objs[0] as System.ComponentModel.DescriptionAttribute;
return attr.Description;
}
}
#region 用于枚举的特性类
public class AttrDescription : Attribute
{
private string _showName;
public AttrDescription(string desc)
{
_showName = desc;
}
public string Description
{
get
{
return _showName;
}
}
}
public class DBValue : AttrDescription
{
public DBValue(string desc)
: base(desc)
{
}
}
//public class DescriptionEn : AttrDescription
//{
// public DescriptionEn(string desc)
// : base(desc)
// {
// }
//}
#endregion
}