У меня есть следующий код в методе, чтобы преобразовать любое количество, чтобы байт:Почему это бросает исключение OverflowException?
try {
return (byte) Convert.ChangeType(operand.RealValue, TypeCode.Byte);
}
catch (OverflowException) {
if (AllowArithmeticOverflow) {
unchecked {
decimal d = Convert.ToDecimal(operand.RealValue);
return (byte) d;
}
}
throw;
}
В этом коде operand.RealValue
как ожидается, будет любое число. Для примера, с которым я тестирую, это sbyte
со значением -13 (проверено с помощью отладчика). Я могу пройти через отладчик и перейти к строке return (byte) d;
... В этот момент выбрано OverflowException, несмотря на то, что он находится в блоке unchecked
.
Итак ... Что дает?
Кроме того, если вы смотрите на мою реализацию и задаетесь вопросом, что, черт возьми, я делаю - это результат всей гимнастики, которую я пробовал до сих пор, чтобы не получить это исключение. Must сжатый ответ выигрывает :)
Примечание: Сообщение об исключении заключается в следующем:
System.OverflowException: Значение было либо слишком велик или слишком мал для байт без знака. ---> System.OverflowException: значение было либо слишком большим, либо слишком маленьким для UInt32.
-13 слишком мал для байт без знака – SwDevMan81
Да, очевидно, - но я хочу, чтобы это в любом случае, в основном только reinterpret_cast это ... – Xenoprimate
@ SwDevMan81 побед! Не могу быть более кратким, чем это. – paqogomez