当小数超出字节范围(0 到 255)时,记录了从十进制到字节的显式转换以引发此异常。
溢出异常:值小于 Byte.MinValue 或大于 Byte.MaxValue。
在第二行,您应该注意到该值默默地包装,wilma
为 0,因此在该合法转换中存在数据丢失。如果您希望看到与上述 uint-to-byte 整数转换相同的行为,您可以在检查的上下文中运行。
checked
{
uint fred = 32768;
byte wilma = (byte)fred;
}
在未经检查的上下文中,整数类型之间的转换会忽略溢出。高阶位被丢弃。(请参阅:C# 语言规范的第 4.1.5 节。)
已检查和未检查的运算符和语句用于控制整数类型算术运算和转换的溢出检查(第 7.6.12 节)。在检查的上下文中,溢出会产生编译时错误或引发 System.OverflowException。在未经检查的上下文中,溢出将被忽略,并且任何不适合目标类型的高位都将被丢弃。
至于避免这些问题,请使用适合您存储的数据的类型。如果数据超出范围byte
,请使用更大的类型。整数类型和浮点数之间的转换尤其成问题,因为后者值的范围可能远远超过整数的范围,当然小数位的数据丢失是不可避免的。
但是,如果您继续使用十进制到字节的转换,则需要记住(并与之比较)字节的最小值和最大值。