Подтвердить что ты не робот

Контрольный блок С#

Может кто-нибудь объяснить мне, что именно отмечен блок не отмечен?
И когда я должен использовать каждый?

4b9b3361

Ответ 1

Арифметическое переполнение; например:

int i = int.MaxValue -10;
checked {       
   i+= 20; // boom: OverflowException
           // "Arithmetic operation resulted in an overflow."
}

Поэтому используйте checked, если вы не хотите, чтобы случайный переполнение/обертка была проблемой, и скорее увидели бы исключение.

unchecked явно устанавливает режим, позволяющий переполнение; по умолчанию это unchecked, если вы не укажете компилятору иначе - либо с помощью кода (выше), либо с помощью компилятора (/checked в csc).

Ответ 2

От MSDN

Операторы С# могут выполняться либо в проверенный или непроверенный контекст. В проверенный контекст, арифметическое переполнение вызывает исключение. В бесконтрольном контекст, арифметическое переполнение игнорируется, и результат усекается.

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

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

Для получения более подробной информации и примеров следуйте приведенной выше ссылке.

Ответ 3

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

Предположим, вы хотите преобразовать значение int в короткое значение типа (называемое сужающим преобразованием). переменная типа int может иметь диапазон значений от -2,147,483,648 до 2,147,483,647. Но короткий может иметь только от -32,768 до 32,767.

По этой причине короткая переменная не может иметь все возможные значения, которые может иметь переменная int. Если какой-то способ, можно привести следующий пример:

                int y = 1000000000;
                short x = (short)y;

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

По умолчанию С# не выдает никаких исключений для вышеуказанного кода. Но есть несколько способов выкинуть исключение и обработать его. В этом случае проверенные блоки пригодится

        try
        {
            checked
            {
                int y = 1000000000;
                short x = (short)y;
            }
        }
        catch (OverflowException ex)
        {
            MessageBox.Show("hey, we got a overflow/underflow situation");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error");
        }

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

"эй, у нас ситуация с переполнением/недостаточным"

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