В чем разница между проверенным и непроверенным? - PullRequest
14 голосов
/ 22 сентября 2010

В чем разница между

checked(a + b)

и

unchecked(a + b)

?

Ответы [ 5 ]

20 голосов
/ 22 сентября 2010

Это операторы, которые проверяют (или не проверяют) переполнение в результирующей числовой операции.В случае checked возникает исключение OverflowException, если результат операции превышает минимальное или максимальное значение, допустимое для типа данных.

Дополнительная информация доступна по MSDN

10 голосов
/ 22 сентября 2010

Управляет проверкой переполнения для целочисленных операций.

7 голосов
/ 22 сентября 2010

, если a + b больше, чем максимальное значение типа данных, проверенный вызовет исключение.Если флажок снят, значение переполнения будет свернуто и добавлено к нулю.

5 голосов
/ 22 сентября 2010

Спецификация языка содержит хорошую статью о различиях.

Проверенные и непроверенные операторы используются для управления контекстом проверки переполнения для арифметических операций и преобразований целочисленного типа..

class Test
{
   static readonly int x = 1000000;
   static readonly int y = 1000000;
   static int F() {
      return checked(x * y);      // Throws OverflowException
   }
   static int G() {
      return unchecked(x * y);   // Returns -727379968
   }
   static int H() {
      return x * y;               // Depends on default
   }
}
1 голос
/ 22 сентября 2010

Другие ответы охватывают разницу между ними. Стоит отметить, что если a и b являются числами с плавающей точкой, разницы не будет. Работает только для целочисленных операций.

Существует также опция сборки, которую вы можете установить, чтобы все проверялось. Это будет означать, что ваше приложение работает немного медленнее, но вам не нужно проверять арифметические операции.

Вот хорошая статья, которая описывает некоторые подводные камни: http://www.codeproject.com/KB/cs/overflow_checking.aspx

...