Что может вызвать проверку переполнения здесь? - PullRequest
1 голос
/ 24 февраля 2010

Я привык к тому, что C # не выполняет проверки переполнения, как говорится в спецификации языка (§7.5.12):

Для неконстантных выражений (выражений, которые оцениваются во время выполнения), которые не заключены ни в какие проверенные или непроверенные операторы или операторы, контекст проверки переполнения по умолчанию не проверяется, если внешние факторы (такие как переключатели компилятора и конфигурация среды выполнения ) позвоните для проверки оценки.

Я использовал это при проверке границ массива в низкоуровневом коде:

if ((uint)index >= (uint)TotalCount)
    ...

Если индекс отрицательный, я ожидаю, что он станет большим положительным числом, так что он превысит TotalCount. Однако, к моему удивлению, отрицательное число создает OverflowException, и я должен обернуть выражение в unchecked (). Я просмотрел параметры проекта в Visual Studio и не вижу возможности включить или отключить проверку переполнения. Так почему это может быть здесь?

1 Ответ

7 голосов
/ 24 февраля 2010

должно быть в проекте.

  1. Дважды щелкните папку «Свойства».
  2. Сборка вкладки.
  3. Нажмите кнопку Дополнительно ....
  4. Снимите отметку «Проверка арифметического переполнения / недостаточного заполнения».
...