这是我的枚举:
public enum DocumentTypes { [EnumMember] TYPE_1 = 1, [EnumMember] TYPE_2 = 2, [EnumMember] TYPE_3 = 3, [EnumMember] TYPE_4 = 4, [EnumMember] TYPE_5 = 5, [EnumMember] TYPE_6 = 6, [EnumMember] TYPE_7 = 7, [EnumMember] TYPE_8 = 12 }
如果我想获得'TYPE_8',如果我只有12,有没有办法获得枚举值?
我试过这个:
((DocumentTypes[])(Enum.GetValues(typeof(DocumentTypes))))[Convert.ToInt32("3")].ToString()
返回'TYPE_4'的值
你可以直接施放它:
int value = 12; DocumentTypes dt = (DocumentTypes)value;
string str = ""; int value = 12; if (Enum.IsDefined(typeof (DocumentTypes),value)) str = ((DocumentTypes) value).ToString(); else str = "Invalid Value";
这也将处理尝试使用的无效值,而不会抛出内部异常
您还可以使用DocumentTypes替换字符串,即
DocumentTypes dt = DocumentTypes.Invalid; // Create an invalid enum if (Enum.IsDefined(typeof (DocumentTypes),value)) dt = (DocumentTypes) value;
对于奖励点,这里是如何将自定义字符串添加到枚举(从此SO答案复制)
Enum DocumentType { [Description("My Document Type 1")] Type1 = 1, etc... }
然后在某处添加扩展方法
public static string GetDescription(this object enumerationValue) where T : struct { Type type = enumerationValue.GetType(); if (!type.IsEnum) throw new ArgumentException("EnumerationValue must be of Enum type", "enumerationValue"); //Tries to find a DescriptionAttribute for a potential friendly name //for the enum MemberInfo[] memberInfo = type.GetMember(enumerationValue.ToString()); if (memberInfo != null && memberInfo.Length > 0) { object[] attrs = memberInfo[0].GetCustomAttributes(typeof (DescriptionAttribute), false); if (attrs != null && attrs.Length > 0) { //Pull out the description value return ( (DescriptionAttribute) attrs[0] ).Description; } } //If we have no description attribute, just return the ToString of the enum return enumerationValue.ToString(); }
然后你可以使用:
DocumentType dt = DocumentType.Type1; string str = dt.GetDescription();
这将检索Description属性值.
这是一个新版本的扩展方法,不需要事先知道Enum的类型.
public static string GetDescription(this Enum value) { var type = value.GetType(); var memInfo = type.GetMember(value.ToString()); if (memInfo.Length > 0) { var attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false); if (attrs.Length > 0) return ((DescriptionAttribute)attrs[0]).Description; } return value.ToString(); }
首先转换为你的枚举类型并调用ToString():
string str = ((DocumentTypes)12).ToString();