Как преобразовать целые числа в символы в C #? - PullRequest
1 голос
/ 12 апреля 2010

Я пытаюсь преобразовать индекс от 1 до 27 в соответствующую заглавную букву. Я знаю, что в C ++ я мог бы напечатать это:

char letter = 'A' + (char)(myIndex % 27);

Этот код не работает в C #. Как я могу выполнить эту задачу в C #?

РЕДАКТИРОВАТЬ: Я бы предпочел не кодировать перечисление или оператор переключателя для этого, если есть лучшее математическое решение, как выше.

Ответы [ 6 ]

8 голосов
/ 12 апреля 2010

Когда вы добавляете (или вычитаете) два символа, вы получаете Int32 в C #. Это будет работать:

int letter = 'A' + (char)(myIndex % 27);

Если вам нужен символ, вам нужно явно привести его снова:

char letter = (char) ('A' + (char)(myIndex % 27));

Однако, скорее всего, это должно быть:

char letter = (char) ('A' + (char)((myIndex - 1) % 26));
6 голосов
/ 12 апреля 2010

Вот табличное решение:

char ToUpperChar(int index)
{
    if (index < 1 || index > 26)
        throw new ArgumentOutOfRangeException("index");

    return "ABCDEFGHIJKLMNOPQRSTUVWXYZ"[index-1]; // took out the % - it's range-checked above.
}
4 голосов
/ 12 апреля 2010
char letter = (char)('A' + (myIndex-1)%26);

(отредактировать магическое число, скорректированные индексы)

2 голосов
/ 12 апреля 2010

В C # вам придется выполнять кастинг немного по-другому:

char letter = (char)('A' + (myIndex % 27));

Однако ваша математика также может быть неправильной, и это, вероятно, ближе к тому, что вы на самом деле хотите:

char letter = (char)('A' + ((myIndex - 1) % 26));
1 голос
/ 13 апреля 2010

Как насчет метода расширения?

    public static int Index(this char letter)
    {
        const int offset = 64;
        if(letter >= 'A' && letter <= 'Z')
            return (Convert.ToInt32(letter) - offset);
        return 0;
    }

// использование ... буква символа = 'A'; int index = letter.Index ();

0 голосов
/ 12 апреля 2010

Это должно сработать ...

byte upperA = 65;
byte index = 1;

char letter = (char)(upperA + (index % 27));

Console.WriteLine(letter);

Мне также нравится ответ Рида.

...