
正文
C# 获取枚举的描述Description
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
方法类:
public static class EnumExtensions
{
#region Enum /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription(this System.Enum obj)
{
return GetDescription(obj, false);
} /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription(this System.Enum obj, bool isTop)
{
if (obj == null)
{
return string.Empty;
}
try
{
Type enumType = obj.GetType();
DescriptionAttribute dna = null;
if (isTop)
{
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
}
else
{
FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
fi, typeof(DescriptionAttribute));
}
if ((dna != null)
&& (string.IsNullOrEmpty(dna.Description) == false))
{
return dna.Description;
}
}
catch
{
}
return obj.ToString();
} /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription<TEnum>(this TEnum obj)
{
return GetDescription(obj, false);
} /// <summary>
/// 获取枚举变量值的 Description 属性
/// </summary>
/// <param name="obj">枚举变量</param>
/// <param name="isTop">是否改变为返回该类、枚举类型的头 Description 属性,而不是当前的属性或枚举变量值的 Description 属性</param>
/// <returns>如果包含 Description 属性,则返回 Description 属性的值,否则返回枚举变量值的名称</returns>
public static string GetDescription<TEnum>(this TEnum obj, bool isTop)
{
if (obj == null)
{
return string.Empty;
}
try
{
Type enumType = obj.GetType();
DescriptionAttribute dna = null;
if (isTop)
{
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(enumType, typeof(DescriptionAttribute));
}
else
{
FieldInfo fi = enumType.GetField(System.Enum.GetName(enumType, obj));
dna = (DescriptionAttribute)Attribute.GetCustomAttribute(
fi, typeof(DescriptionAttribute));
}
if ((dna != null)
&& (string.IsNullOrEmpty(dna.Description) == false))
{
return dna.Description;
}
}
catch
{
}
return obj.ToString();
} /// <summary>
/// 获取字段Description
/// </summary>
/// <param name="fieldInfo">FieldInfo</param>
/// <returns>DescriptionAttribute[] </returns>
public static DescriptionAttribute[] GetDescriptAttr(this FieldInfo fieldInfo)
{
if (fieldInfo != null)
{
return (DescriptionAttribute[])fieldInfo.GetCustomAttributes(typeof(DescriptionAttribute), false);
}
return null;
} /// <summary>
/// 根据Description获取枚举
/// 说明:
/// 单元测试-->通过
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="description">枚举描述</param>
/// <returns>枚举</returns>
public static T GetEnumName<T>(string description)
{
Type _type = typeof(T);
foreach (FieldInfo field in _type.GetFields())
{
DescriptionAttribute[] _curDesc = field.GetDescriptAttr();
if (_curDesc != null && _curDesc.Length > )
{
if (_curDesc[].Description == description)
return (T)field.GetValue(null);
}
else
{
if (field.Name == description)
return (T)field.GetValue(null);
}
}
throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.错误枚举{1}", description, _type.Name), "Description");
} /// <summary>
/// 将枚举转换为ArrayList
/// 说明:
/// 若不是枚举类型,则返回NULL
/// 单元测试-->通过
/// </summary>
/// <param name="type">枚举类型</param>
/// <returns>ArrayList</returns>
public static ArrayList ToArrayList(this Type type)
{
if (type.IsEnum)
{
ArrayList _array = new ArrayList();
Array _enumValues = System.Enum.GetValues(type);
foreach (System.Enum value in _enumValues)
{
_array.Add(new KeyValuePair<System.Enum, string>(value, GetDescription(value)));
}
return _array;
}
return null;
} #endregion Enum
}
枚举类:
#region 职员流程类型 /// <summary>
/// 职员流程类型
/// </summary>
[Description("职员流程类型")]
public enum EmployeeAffairTypeEnum
{
/// <summary>
/// 入职
/// </summary>
[Description("入职")]
ApplyInureEmpInPositon, /// <summary>
/// 转正
/// </summary>
[Description("转正")]
ApplyInureEmpInPass, /// <summary>
/// 兼职
/// </summary>
[Description("兼职")]
ApplyInureEmpPartJob, /// <summary>
/// 结束兼职
/// </summary>
[Description("结束兼职")]
ApplyInureEmpEndPartJob, /// <summary>
/// 异动
/// </summary>
[Description("异动")]
ApplyInureEmpInAdjust, /// <summary>
/// 离职
/// </summary>
[Description("离职")]
ApplyInureEmpInDimission, /// <summary>
/// 正式合同续签
/// </summary>
[Description("正式合同续签")]
ApplyInureEmpContractRenewal, /// <summary>
/// 职员群调审批
/// </summary>
[Description("职员群调审批")]
ApplyInureEmpGroupTransfer, /// <summary>
/// 行车津贴
/// </summary>
[Description("行车津贴")]
ApplyInureEmpMileage
} #endregion 职员流程类型 #region 职员申请单数据(入职、转正、异动、离职、兼职、结束兼职、合同续签、职员异动)的搜索视图 /// <summary>
/// 职员申请单数据(入职、转正、异动、离职、兼职、结束兼职、合同续签、职员异动)的搜索视图
/// </summary>
[Description("职员申请表视图")]
public enum EmployeeApplyViewEnum
{
/// <summary>
/// 入职
/// </summary>
[Description("VM_ApplyInureEmpInPositon")]
ApplyInureEmpInPositon, /// <summary>
/// 转正
/// </summary>
[Description("VM_ApplyInureEmpInPass")]
ApplyInureEmpInPass, /// <summary>
/// 兼职
/// </summary>
[Description("VM_ApplyInureEmpPartJob")]
ApplyInureEmpPartJob, /// <summary>
/// 结束兼职
/// </summary>
[Description("VM_ApplyInureEmpEndPartJob")]
ApplyInureEmpEndPartJob, /// <summary>
/// 异动
/// </summary>
[Description("VM_ApplyInureEmpInAdjust")]
ApplyInureEmpInAdjust, /// <summary>
/// 离职
/// </summary>
[Description("VM_ApplyInureEmpInDimission")]
ApplyInureEmpInDimission, /// <summary>
/// 正式合同续签
/// </summary>
[Description("VM_ApplyInureEmpContractRenewal")]
ApplyInureEmpContractRenewal, /// <summary>
/// 职员群调审批
/// </summary>
[Description("VM_ApplyInureEmpGroupTransfer")]
ApplyInureEmpGroupTransfer, /// <summary>
/// 行车津贴
/// </summary>
[Description("VM_ApplyInureEmpMileage")]
ApplyInureEmpMileage
} #endregion
调用方法:
var affairDescription = EmployeeAffairTypeEnum.ApplyInureEmpContractRenewal.GetDescription();
Console.WriteLine(affairDescription);
var viewName = ((EmployeeApplyViewEnum)EmployeeAffairTypeEnum.ApplyInureEmpContractRenewal).GetDescription();
Console.WriteLine(viewName);







