using System.Reflection;
获取枚举值的Description
/// <summary>
/// 获取枚举值的Description
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="value"></param>
/// <returns></returns>
public static string GetEnumDescription<T>(this T value) where T : struct
{
string result = value.ToString();
Type type = typeof(T);
FieldInfo info = type.GetField(value.ToString());
var attributes = info.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (attributes != null && attributes.FirstOrDefault() != null)
{
result = (attributes.First() as DescriptionAttribute).Description;
}
return result;
}
var @enum = EnumType.合格;
Console.WriteLine(@enum);
var str = @enum.GetEnumDescription();
Console.WriteLine(str);
根据Description获取枚举值
/// <summary>
/// 根据Description获取枚举值
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="description"></param>
/// <returns></returns>
public static T GetEnumValueByDescription<T>(this string description) where T : struct
{
Type type = typeof(T);
foreach (var field in type.GetFields())
{
if (field.Name == description)
{
return (T)field.GetValue(null);
}
var attributes = (DescriptionAttribute[])field.GetCustomAttributes(typeof(DescriptionAttribute), true);
if (attributes != null && attributes.FirstOrDefault() != null)
{
if (attributes.First().Description == description)
{
return (T)field.GetValue(null);
}
}
}
throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", description), "Description");
}
str = "033";
@enum = str.GetEnumValueByDescription();
Console.WriteLine(@enum);
根据字符串表示形式获取枚举值
/// <summary>
/// 根据字符串表示形式获取枚举值
/// </summary>
/// <typeparam name="T">枚举类型</typeparam>
/// <param name="value">枚举的字符串形式</param>
/// <returns></returns>
public static T GetEnumValue<T>(this string value) where T : struct
{
T result;
if (Enum.TryParse(value, true, out result))
{
return result;
}
throw new ArgumentException(string.Format("{0} 未能找到对应的枚举.", value), "Value");
}
}
str = @enum.ToString();
@enum = str.GetEnumValue();
Console.WriteLine(@enum);
internal class DescriptionAttribute : Attribute
{
public DescriptionAttribute(string value)
{
Description = value;
}
public string Description { get; set; }
}
public enum EnumType
{
[Description("011")]
合格 = 1,
[Description("022")]
不合格 = 2,
[Description("033")]
异常 = 3,
}
结果