1)枚举获取描述
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace QRC.Common.Enum
{
public static class BaseEnum
{
/// <summary>
/// 取得枚举描述
/// </summary>
/// <param name="para"></param>
/// <returns></returns>
public static string GetEnumDesc(this System.Enum para)
{
string strValue = para.ToString();
FieldInfo fieldInfo = para.GetType().GetField(strValue);
Object[] objs = fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
if (objs.Length == 0)
{
return strValue;
}
else
{
var da = (DescriptionAttribute)objs[0];
return da.Description;
}
}
/// <summary>
/// 取得枚举值数
/// </summary>
/// <param name="EnumObject">枚举对象</param>
/// <returns>枚举值数</returns>
public static int GetEnumValue(this System.Enum EnumObject)
{
int intValue = (int)System.Enum.Parse(EnumObject.GetType(), EnumObject.ToString(), true);
return intValue;
}
/// <summary>
///
/// </summary>
/// <param name="enumType"></param>
/// <param name="key"></param>
/// <param name="val"></param>
/// <returns></returns>
public static DataTable EnumToDataTable(Type enumType)
{
int[] values = (int[])System.Enum.GetValues(enumType);
string[] names = System.Enum.GetNames(enumType);
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Value", typeof(int)), new DataColumn("Description", typeof(string)) });
for (int i = 0; i < values.Length; i++)
{
string description = "";
var enumObject = System.Enum.Parse(enumType, values[i].ToString());
description = (enumObject as System.Enum).GetEnumDesc();
dt.Rows.Add(values[i], description);
}
return dt;
}
public static Dictionary<int, string> EnumToDictionary(Type enumType)
{
int[] values = (int[])System.Enum.GetValues(enumType);
string[] names = System.Enum.GetNames(enumType);
Dictionary<int, string> dic = new Dictionary<int, string>();
for (int i = 0; i < values.Length; i++)
{
string description = "";
var enumObject = System.Enum.Parse(enumType, values[i].ToString());
description = (enumObject as System.Enum).GetEnumDesc();
dic.Add(values[i], description);
}
return dic;
}
}
}
调用
BaseEnum.GetEnumDesc(QRCEnum.RegisterApplyResultStatus.Complete)
BaseEnum.GetEnumValue(QRCEnum.LabelingResultStatus.Complete)
2)根据值得到中文备注
public enum ProblemStatus
{
[Description("草稿")]
草稿 = 0,
[Description("审核中")]
审核中 = 1,
[Description("待整改")]
待整改 = 2,
[Description("整改确认")]
整改确认 = 3,
[Description("已整改")]
已整改 = 4
}
/// <summary>
/// 根据值得到中文备注
/// </summary>
/// <param name="e"></param>
/// <param name="value"></param>
/// <returns></returns>
public static string GetEnumDesc(this Type e, int? value)
{
FieldInfo[] fields = e.GetFields();
for (int i = 1, count = fields.Length; i < count; i++)
{
if ((int)System.Enum.Parse(e, fields[i].Name) == value)
{
DescriptionAttribute[] EnumAttributes =
(DescriptionAttribute[])fields[i].GetCustomAttributes(typeof(DescriptionAttribute), false);
if (EnumAttributes.Length > 0)
{
return EnumAttributes[0].Description;
}
}
}
return "";
}
调用
EnumHelper.GetEnumDesc(typeof(Platform.Common.BaseEnum.ProblemStatus), 1);