我在将任何数字转换为字节的方法中有以下代码:
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
块中。
所以...什么给了?
此外,如果您正在查看我的实现并想知道我到底在做什么 - 这是我迄今为止尝试过的所有体操的结果,没有得到这个例外。必须简洁的答案获胜:)
注意:异常信息如下:
System.OverflowException:对于无符号字节,值太大或太小。---> System.OverflowException:对于 UInt32,值太大或太小。