Перечисления и строковые значения в ASP.NET - PullRequest
3 голосов
/ 23 мая 2010

Я ищу несколько рекомендаций по перечислению и извлечению соответствующего строкового значения. Учитывая это:

public enum Fruits {
    Apple,
    Orange,
    Grapefruit,
    Melon
}

Каков наилучший способ получить соответствующее строковое значение имени? Например. «Грейпфрут», учитывая, что строковое значение может не соответствовать представлению в перечислении. например, "Casaba Melon"

Мое нынешнее мышление - функция, принимающая перечисление и возвращающая строку, но разве это не означает жесткое кодирование строковых значений (что я предпочитаю не делать)? Является ли использование файла ресурсов, где строка может быть получена через перечисление слишком тяжело?

Ответы [ 2 ]

4 голосов
/ 23 мая 2010

Чтобы ответить на ваш вопрос, вы можете украсить свои перечисления атрибутами, чтобы дать им правильную отображаемую строку.Вот несколько примеров

Основным ограничением этого подхода является то, что если вам когда-либо понадобится интернационализировать ваше приложение, я не знаю, как заставить строки атрибутов изменять значение в зависимости от локали потока (или любого другого способа, который вы используете для различения локалей).

1 голос
/ 23 мая 2010

R0MANARMY уже дала очень хорошее решение. Я предоставлю эту альтернативу, менее приятную, хотя все же. Вы, вероятно, можете сделать эту культуру более чувствительной.

Скажем, у вас есть перечисление

public enum NicePeople
{
    SomeGuy,
    SomeOtherGuy
}

Затем вы можете создать такой метод расширения, как этот

public static class MyExtensions
{
    public static string GetName(this NicePeople tst)
    {
        switch (tst)
        {
            case NicePeople.SomeGuy:
                return "Some Nice guy";
            case NicePeople.SomeOtherGuy:
                return "Another Nice Guy";
            default:
                throw new Exception("Naw");
        }
    }
}

И получи свое имя серийного убийцы, как это

NicePeople.SomeGuy.GetName()
...