LinqPad を使用して何かをテストしていたところ、次のコードが例外を生成しなかったことに驚きました。
ulong lSmallValue = 5;
ulong lBigValue = 10;
ulong lDifference = lSmallValue - lBigValue;
Console.WriteLine(lDifference);
Console.WriteLine((long)lDifference);
これにより、次の出力が生成されます。
18446744073709551611
-5
幸いなことに、私はこの動作を望んでいましたが、これによりOverflowException
がスローされると想定していました。
次の条件下では、実行時に OverflowException がスローされます。
- 算術演算は、演算によって返されるデータ型の範囲外の結果を生成します。
- キャストまたは変換操作で縮小変換を実行しようとしましたが、ソース データ型の値がターゲット データ型の範囲外です。
lSmallValue - lBigValue
操作が最初のカテゴリに分類されないのはなぜですか?