Почему ToUpper() не возвращает "*" при применении к "8"?
string s = "h";
s = s.ToUpper();
возвращает "H".
string s = "8";
s = s.ToUpper();
возвращает "8"
Если это не возвращает "*"?
Ответ 1
Нет, не следует. ToUpper() не означает WithShiftKeyOnAnInternationalASCIIKeyboard(). Существует не прописная буква 8, поскольку 8 - это число, а не буква.
Конечно, это грубое чрезмерное упрощение (если только номер не позволяет автоматически сделать определенный символ в наборе символов безлицензионным), но это, вероятно, то, о чем вы просите, так что я оставлю его на что.
Ответ 2
Поскольку нет верхнего регистра 8.
Просто потому, что используемая вами клавиатура имеет * на том же ключе, что и 8, не означает, что все клавиатуры работают. На некоторых языках нет буквы в верхнем регистре - что должно ToUpper вернуть для них?
Этот метод использует правила оболочки текущей культуры для преобразования каждого символа в текущем экземпляре в его верхний регистр. Если символ не имеет эквивалента в верхнем регистре, он включается в неизмененную строку.
Ответ 3
Реальный ответ заключается в том, что TextInfo, связанный с CultureInfo для en-US, не определяет "*" как верхний регистр "8".
Возможно, возможно расширить этот текст, переопределить toUpper() и заставить его работать так, как вы пожелаете.
Ответ 4
Номера не имеют верхних букв.
если вы используете функцию ToUpper() для следующего текста:
"есть 8 зданий"
Какой результат вы хотели бы иметь?
"НАХОДИТСЯ 8 ЗДАНИЙ" или "НАХОДИТСЯ * ЗДАНИЯ"
Keyboardlayout локализуется, например. на немецких клавиатурах есть ( на клавише 8
Ответ 5
Просто потому, что вы нажимаете shift 8, чтобы получить *, не делает его заглавным, оно применяется только для символов a-z.