我是测试出来的东西用LinqPad而感到惊讶的是,下面的代码没有产生异常:
ulong lSmallValue = 5;
ulong lBigValue = 10;
ulong lDifference = lSmallValue - lBigValue;
Console.WriteLine(lDifference);
Console.WriteLine((long)lDifference);
这将产生以下输出:
18446744073709551611
-5
幸运的是,我希望这种行为,但我认为这会导致一个假设下OverflowException
抛出。
从System.OverflowException
:
一个发生OverflowException在运行时在下列情况下抛出:
- 算术运算产生的结果是由操作返回的数据类型的范围之外。
- 铸造或转换操作尝试执行收缩转换,并且源数据类型的值在目标的数据类型的范围之外。
为什么不操作lSmallValue - lBigValue
落入第一类?