Я видел, что это обычно обрабатывается путем добавления атрибута [StringValue("New York")]
к элементам enum.Быстрый поиск в Google возвращает это сообщение в блоге, , в котором есть довольно хороший способ сделать это.
По сути, создайте класс атрибута:
public class StringValueAttribute : Attribute {
public string StringValue { get; protected set; }
public StringValueAttribute(string value) {
this.StringValue = value;
}
}
И метод расширениячтобы получить к нему доступ:
public static string GetStringValue(this Enum value) {
// Get the type
Type type = value.GetType();
// Get fieldinfo for this type
FieldInfo fieldInfo = type.GetField(value.ToString());
// Get the stringvalue attributes
StringValueAttribute[] attribs = fieldInfo.GetCustomAttributes(
typeof(StringValueAttribute), false) as StringValueAttribute[];
// Return the first if there was a match, or enum value if no match
return attribs.Length > 0 ? attribs[0].StringValue : value.ToString();
}
Тогда ваше перечисление будет выглядеть так:
public enum EnumState{
[StringValue("New York")]
NewYork,
[StringValue("New Mexico")]
NewMexico,
}
, и вы можете просто использовать myState.GetStringValue();