我有以下枚举:
public enum AuthenticationMethod{FORMS = 1,WINDOWSAUTHENTICATION = 2,SINGLESIGNON = 3}
然而,问题是,当我要求AuthenticationMethod.FORMS而不是id 1时,我需要“表格”这个词。
我找到了这个问题的以下解决方案(链接):
首先,我需要创建一个名为“StringValue”的自定义属性:
public class StringValue : System.Attribute{private readonly string _value;
public StringValue(string value){_value = value;}
public string Value{get { return _value; }}
}
然后我可以将此属性添加到我的枚举器:
public enum AuthenticationMethod{[StringValue("FORMS")]FORMS = 1,[StringValue("WINDOWS")]WINDOWSAUTHENTICATION = 2,[StringValue("SSO")]SINGLESIGNON = 3}
当然,我需要一些东西来检索StringValue:
public static class StringEnum{public static string GetStringValue(Enum value){string output = null;Type type = value.GetType();
//Check first in our cached results...
//Look for our 'StringValueAttribute'
//in the field's custom attributes
FieldInfo fi = type.GetField(value.ToString());StringValue[] attrs =fi.GetCustomAttributes(typeof(StringValue),false) as StringValue[];if (attrs.Length > 0){output = attrs[0].Value;}
return output;}}
很好,现在我有了获取枚举器字符串值的工具。我可以这样使用它:
string valueOfAuthenticationMethod = StringEnum.GetStringValue(AuthenticationMethod.FORMS);
好的,现在所有这些工作都像一个魅力,但我发现它有很多工作。我想知道是否有更好的解决方案。
我还尝试了一些带有字典和静态属性的东西,但那也不是更好。