Я привык к тому, что C # не выполняет проверки переполнения, как говорится в спецификации языка (§7.5.12):
Для неконстантных выражений (выражений, которые оцениваются во время выполнения), которые не заключены ни в какие проверенные или непроверенные операторы или операторы, контекст проверки переполнения по умолчанию не проверяется, если внешние факторы (такие как переключатели компилятора и конфигурация среды выполнения ) позвоните для проверки оценки.
Я использовал это при проверке границ массива в низкоуровневом коде:
if ((uint)index >= (uint)TotalCount)
...
Если индекс отрицательный, я ожидаю, что он станет большим положительным числом, так что он превысит TotalCount. Однако, к моему удивлению, отрицательное число создает OverflowException, и я должен обернуть выражение в unchecked (). Я просмотрел параметры проекта в Visual Studio и не вижу возможности включить или отключить проверку переполнения. Так почему это может быть здесь?