Ключевые слова checked и unchecked Имеется средство, связанно | C#Hive: Projects & Progress | Программирование
Ключевые слова checked и unchecked
Имеется средство, связанное с генерированием исключений, возникающих при переполнении в арифметических вычислениях. Как известно, результаты некоторых видов арифметических вычислений могут превышать диапазон представления чисел для типа данных, используемого в вычислении. В этом случае происходит так называемое переполнение.
Допускается указывать, будет ли в коде генерироваться исключение при переполнении, с помощью ключевых слов checked и unchecked. Так, если требуется указать, что выражение будет проверяться на переполнение, следует использовать ключевое слово checked, а если требуется проигнорировать переполнение — ключевое слово unchecked. В последнем случае результат усекается, чтобы не выйти за пределы диапазона представления чисел для целевого типа выражения.
У ключевого слова checked имеются две общие формы. В одной форме проверяется конкретное выражение, поэтому она называется операторной. В другой форме проверяется блок операторов, поэтому она называется блочной. Ниже приведены обе формы:
checked(выражение)
checked
{
// Проверяемые операторы
// ...
}
Если вычисление проверяемого выражения или блока приводит к переполнению, то генерируется исключение OverflowException.
У ключевого слова unchecked также имеются две общие формы. Их синтаксис имеет ту же основу:
unchecked(выражение)
unchecked
{
// Операторы, для которых переполнение игнорируется
// ...
}
Если же в непроверяемом выражении или блоке происходит переполнение, то результат его вычисления усекается.
Используем unchecked в одном выражении:
int maxInt = int.MaxValue;
int uncheckedResult = unchecked(maxInt + 1);
Console.WriteLine(uncheckedResult);
Вывод с урезанным результатом:
-2147483648
Используем checked для всего блока операторов:
checked
{
try
{
int maxInt = int.MaxValue;
int checkedResult = maxInt + 1;
Console.WriteLine(checkedResult);
}
catch (OverflowException e)
{
Console.WriteLine($"Переполнение: {e.Message}");
}
}
Вывод:
Переполнение: Arithmetic operation resulted in an overflow.
Использовать checked уместно там, где переполнение может привести к критическим ошибкам в логике нашего приложения.
#Полезно #Exception #TryCatch