Символы в .Net имеют длину 16 бит (короткая / короткая).
Настройки проекта по умолчанию для C # означают, что приведение будет работать и будет просто игнорировать старшие биты для любого символа, который больше, чем 255, т.е. как использование (byte) (c & 0xff)
.
Однако, если вы используете проверенную арифметику, попытка привести символ, который больше 255, приведет к ArithmeticOverflowExcetion.
В настройках сборки проекта по умолчанию для арифметики можно установить флажок / не отмечен.
Пример
char c = (char) 300;
byte b = unchecked ((byte) c);
Console.WriteLine (b);
// Result: 44
char c = (char) 300;
byte b = checked ((byte) c);
Console.WriteLine (b);
// Result: ArithmeticOverflowExcetion
Альтернативный
Альтернативно, вы можете сравнивать символы напрямую.
Например, чтобы проверить, является ли символ 0-9
char c = input[i];
if (c >= '0' && c <= '9') {
// do something
}
Вы можете даже сравнить char с int
char c = input[i];
if (c >= 48 && c <= 57) {
// do something
}