这是我的枚举: 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] TY
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”
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;
而对于奖励点,这里是如何添加自定义字符串到枚举(从this SO answer复制)
Enum DocumentType
{
[Description("My Document Type 1")]
Type1 = 1,
etc...
}
然后在某处添加一个扩展方法
public static string GetDescription<T>(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<DocumentType>();
哪个将重新生成Description属性值。
编辑 – 更新代码
这是一个新版本的扩展方法,不需要知道手中的枚举类型。
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();
}
