Операторы checked и unchecked используются для управления контекстом проверки переполнения для арифметических операций и преобразований целого типа.
выражение_checked: checked ( выражение )
выражение_unchecked: unchecked ( выражение )
Оператор checked вычисляет содержащееся в нем выражение в проверяемом контексте.
Оператор unchecked — в непроверяемом. Используется для подавления проверки переполнения при выполнении арифметических операций и преобразований с данными целого типа. В непроверяемом контексте арифметическое переполнение будет проигнорировано, а результат усечен.
В контексте checked для неконстантных выражений (выражений, которые вычисляются во время выполнения), возникает исключение System.OverflowException.
Явное преобразование из int к short, где
short
От -32 768 до 32 767
16-разрядное целое число со знаком
System.Int16
int
От -2 147 483 648 до 2 147 483 647
32-разрядное целое число со знаком
System.Int32
int i = 2147483647;
short ixx = unchecked((short)i);
Примериспользования оператора checked.
Для неконстантных выражений (выражений, которые вычисляются во время выполнения), не заключенных в операторы или инструкции checked или unchecked, контекстом проверки переполнения по умолчанию является unchecked, если внешние факторы (например, переключатели компилятора и конфигурация среды исполнения) не заставляют установить контекст checked.
Пример.
int i = 2147483647;
short ixx = (short)i;
Если размер исходного типа превышает размер конечного, дополнительные самые старшие разряды исходного значения отбрасываются.
Если размер исходного типа меньше размера конечного, размер исходного значения расширяется до размера конечного типа за счет добавления знака или нулей.
Для преобразований из типа decimal к целому типу исходное значение округляется в сторону нуля до ближайшего целого значения. Результатом преобразования является полученное целое значение.
Пример.
decimal d = 10000.5m;
int i =(int)d;
Console.WriteLine(i);
Для типов с плавающей запятой и типа decimal отсутствует неявное преобразование, поэтому для преобразования между этими двумя типами следует использовать приведение. Пример.