У меня есть следующее перечисление:
public enum AuthenticationMethod
{
FORMS = 1,
WINDOWSAUTHENTICATION = 2,
SINGLESIGNON = 3
}
Однако проблема в том, что мне нужно слово "FORMS", когда я запрашиваю AuthenticationMethod.FORMS, а не идентификатор 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 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);
Хорошо, теперь все они работают как шарм, но я нахожу его очень много работы. Мне было интересно, есть ли лучшее решение для этого.
Я также пробовал что-то со словарем и статическими свойствами, но это было не лучше.