Может ли Enum содержать только числовые значения, а не строку? - PullRequest
1 голос
/ 11 июля 2010

У меня есть этот Enum:

enum ASCIIChars
        {
            BLACK = "@",
            CHARCOAL = "#",
            DARKGRAY = "8",
            MEDIUMGRAY = "&",
            MEDIUM = "o",
            GRAY = ":",
            SLATEGRAY = "*",
            LIGHTGRAY = ".",
            WHITE = " "
        };

Вот где я его использую:

private void GetShadeColor(int redValue)
        {
            string ASCII = " ";

            if (redValue >= 230)
            {
                ASCII = ASCIIChars.WHITE;
            }
            else if (redValue >= 200)
            {
                ASCII = ASCIIChars.LIGHTGRAY;
            }
            else if (redValue >= 180)
            {
                ASCII = ASCIIChars.SLATEGRAY;
            }
            else if (redValue >= 160)
            {
                ASCII = ASCIIChars.GRAY;
            }
            else if (redValue >= 130)
            {
                ASCII = ASCIIChars.MEDIUM;
            }
            else if (redValue >= 100)
            {
                ASCII = ASCIIChars.MEDIUMGRAY;
            }
            else if (redValue >= 70)
            {
                ASCII = ASCIIChars.DARKGRAY;
            }
            else if (redValue >= 50)
            {
                ASCII = ASCIIChars.CHARCOAL;
            }                       
            else
            {
                ASCII = ASCIIChars.BLACK;
            }

            ASCIIArt.Append(ASCII);
        }

Я получаю следующие ошибки в объявлении enum:

Невозможно неявно преобразовать строку в int.

Ответы [ 6 ]

3 голосов
/ 11 июля 2010

Я бы рекомендовал использовать Dictionary<AsciiCharacters, char> вместо.

Другой способ - использовать атрибуты , но я не уверен, насколько это полезно в вашей ситуации.

2 голосов
/ 11 июля 2010

Есть ли у вас особая привязанность к использованию enum?Если нет, вы можете приблизить то, что вы хотите, используя вместо этого статический класс с константами:

public static class AsciiChars
{
    public const string Black = "@";
    public const string Charcoal = "#";
    ...
    public const string White = " ";
}

Затем вы можете использовать эти значения так же, как вы указали в своем примере:

2 голосов
/ 11 июля 2010

Да, ты не можешь этого сделать.Перечисляемые значения только для чисел.Подумайте об определении статической структуры, сопоставляющей значения перечисления со строковыми / символьными значениями, или измените ваше перечисление на класс с предопределенным статическим экземпляром, соответствующим каждому значению перечисления.

0 голосов
/ 11 июля 2010

Вы не можете напрямую удерживать строку, но вы можете назначать строковые значения аннотациями и извлекать их с помощью отражения.

Посмотрите на это .

0 голосов
/ 11 июля 2010

Используйте '@' вместо "@"

0 голосов
/ 11 июля 2010

Ответ на ваш вопрос в заголовке темы: Да.

Ср http://msdn.microsoft.com/en-us/library/sbbt4032.aspx:

Каждый тип перечисления имеет базовый тип, который может быть любым целым типом, кроме char. Базовый тип элементов перечисления по умолчанию - int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...