Выключение контроля переполнения в C#



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



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



int n1 = int.MaxValue;      // 2147483647 (0x7FFFFFFF)

int n2 = unchecked(n1 + 1); // Перенос -2147483648

int n3 = n1 + 1; // OverflowException




Как и в случае с checked мы так же может использовать unchecked не только для конкретных операторов, но и целых участков кода:



int n1 = int.MaxValue;  // 2147483647

unchecked

{

int n2 = n1 + 1; // Перенос -2147483648

int n4 = n1 * 2; // -2

}




Уверен, вы замечали, что следующий код не будет скомпилирован и отобразится ошибка:



int n1 = int.MaxValue + 1;  // Ошибка компиляции: overflow




В этом случае нам также может помочь unchecked:



int n2 = unchecked(int.MaxValue + 1);




💬 Одной из полезных возможностей в Visual Studio для повышения продуктивности для меня являются сниппеты (настоятельно рекомендую ознакомиться всем тем, кто их не использует 😉). А какой из них вы используете чаще всего?



#data_types