Когда мы должны использовать проверенный оператор в C#?

Когда должен мы использовать checked оператор в C#?
Действительно ли это только подходит для обработки исключений?

14
задан shA.t 22 August 2017 в 08:33
поделиться

4 ответа

Вы должны использовать checked для защиты от (тихого) переполнения в выражении.
И используйте без отметки , если вы знаете, что может произойти безопасное переполнение.

Вы используете оба там, где не хотите полагаться на настройки компилятора по умолчанию (для всего проекта).

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

Также обратите внимание, что они бывают двух видов:

 x = unchecked(x + 1);    // ( expression )
 unchecked { x = x + 1;}  // { statement(s) }
14
ответ дан 1 December 2019 в 10:18
поделиться

проверено поможет вам обнаружить System.OverFlowException , которое в противном случае останется незамеченным

int result = checked (1000000 * 10000000);   
    // Error: operation > overflows at compile time

int result = unchecked (1000000 * 10000000);  
    // No problems, compiles fine
6
ответ дан 1 December 2019 в 10:18
поделиться

Из Проверенные и непроверенные операторы

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

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

В непроверенном контексте, если выражение дает значение, которое выходит за пределы диапазона целевого типа , результат усекается.

отмечен , не отмечен

3
ответ дан 1 December 2019 в 10:18
поделиться

отмечен vs. не отмечен также полезен в тех случаях, когда вы выполняете целочисленную математику. особенно при увеличении операций, и вы знаете, что увеличите значение, превышающее UInt32.MaxValue , и хотите, чтобы оно безвредно переполнилось обратно до 0 .

3
ответ дан 1 December 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: