言語仕様に記載されているように、私はC#がオーバーフローチェックを実行しないことに慣れています(§7.5.12)。
チェックされた、またはチェックされていない演算子またはステートメントで囲まれていない非定数式(実行時に評価される式)の場合、外部要因(コンパイラスイッチや実行環境構成など)が要求しない限り、デフォルトのオーバーフローチェックコンテキストはチェックされません。評価を確認しました。
低レベルのコードで配列境界チェックを行うときに、これを利用しました。
if ((uint)index >= (uint)TotalCount)
...
インデックスが負の場合、TotalCountを超えるように大きな正の数になると思います。ただし、驚いたことに、負の数を指定するとOverflowExceptionが発生するため、式をunchecked()でラップする必要があります。Visual Studioでプロジェクトオプションを確認しましたが、オーバーフローチェックを有効または無効にするオプションが表示されません。では、なぜここにあるのでしょうか?