Когда должен мы использовать checked
оператор в C#?
Действительно ли это только подходит для обработки исключений?
Вы должны использовать checked
для защиты от (тихого) переполнения в выражении.
И используйте без отметки
, если вы знаете, что может произойти безопасное переполнение.
Вы используете оба там, где не хотите полагаться на настройки компилятора по умолчанию (для всего проекта).
Обе формы встречаются довольно редко, но при выполнении критических целочисленных арифметических операций стоит подумать о возможном переполнении.
Также обратите внимание, что они бывают двух видов:
x = unchecked(x + 1); // ( expression )
unchecked { x = x + 1;} // { statement(s) }
проверено
поможет вам обнаружить System.OverFlowException
, которое в противном случае останется незамеченным
int result = checked (1000000 * 10000000);
// Error: operation > overflows at compile time
int result = unchecked (1000000 * 10000000);
// No problems, compiles fine
Из Проверенные и непроверенные операторы
Проверенные и непроверенные операторы используются для управления контекстом проверки переполнения для целочисленных арифметических операций и преобразований.
В проверенном контексте, если выражение дает значение, выходящее за пределы диапазона целевого типа, результат зависит от того, выражение является постоянным или непостоянным. Постоянные выражения вызывают ошибки во время компиляции, в то время как непостоянные выражения оцениваются во время выполнения и вызывают исключения.
В непроверенном контексте, если выражение дает значение, которое выходит за пределы диапазона целевого типа , результат усекается.
отмечен
vs. не отмечен
также полезен в тех случаях, когда вы выполняете целочисленную математику. особенно при увеличении операций, и вы знаете, что увеличите значение, превышающее UInt32.MaxValue
, и хотите, чтобы оно безвредно переполнилось обратно до 0
.