Преобразовать символ в его целое целое число?

Я пытаюсь найти, есть ли быстрый способ получить целочисленную позицию символа в алфавите (С#).

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

Я также рассмотрел позицию ASCII (прописного) символа относительно "65"... но опять же, кажется, больше работы, чем должно быть!

[Английский только на 26 букв, не требуется интернационализация - и нет, это не домашнее задание!]

Ответы

Ответ 1

Программирование 101:

char c = 'A';
//char c = 'b'; you may use lower case character.
int index = char.ToUpper(c) - 64;//index == 1

Ответ 2

Для нижнего и верхнего регистров:

int index = (int) c% 32;

Ответ 3

Так как char и int можно смешивать и сопоставлять в вычислениях, вы можете рассматривать вас как char как число (которое наверняка будет падать между известными значениями):

char c = 'A';
var index = (c < 97 ? c - 64 : c - 96);

Ответ 4

Ясная, читаемая, основанная на 0 реализация метода @Ahmed с проверкой границ.

/// <summary>
/// Converts a latin character to the corresponding letter index in the standard Latin alphabet
/// </summary>
/// <param name="value">An upper- or lower-case Latin character</param>
/// <returns>The 0-based index of the letter in the Latin alphabet</returns>
private static int GetIndexInAlphabet(char value)
{
    // Uses the uppercase character unicode code point. 'A' = U+0042 = 65, 'Z' = U+005A = 90
    char upper = char.ToUpper(value);
    if (upper < 'A' || upper > 'Z')
    {
        throw new ArgumentOutOfRangeException("value", "This method only accepts standard Latin characters.");
    }

    return (int)upper - (int)'A';
}