Оператор checked
Контекст checked можно задать блоком
или обернуть одно выражение в checked(…).
При переполнении для целых типов выбрасывается
OverflowException. Константные выражения
проверяются на этапе компиляции, поэтому,
например, int.MaxValue + 1 в константе
не скомпилируется. Неконстантная арифметика
по умолчанию выполняется в режиме
unchecked.
Синтаксис
checked { выражения }
checked(выражение)
Пример
Давайте безопасно сложим два небольших числа:
using System;
class Program
{
static void Main()
{
int a = 100;
int b = 23;
int res = checked(a + b);
Console.WriteLine(res);
}
}
Результат выполнения кода:
123
Пример
Давайте поймаем переполнение при прибавлении единицы:
using System;
class Program
{
static void Main()
{
int num = int.MaxValue;
try
{
int res = checked(num + 1);
Console.WriteLine(res);
}
catch (OverflowException)
{
Console.WriteLine("overflow");
}
}
}
Результат выполнения кода:
"overflow"
Пример
Давайте используем блок checked для нескольких операций:
using System;
class Program
{
static void Main()
{
int num = 5;
checked
{
num = num * 2;
}
Console.WriteLine(num);
}
}
Результат выполнения кода:
10
Пример
Давайте сравним поведение без переполнения в checked:
using System;
class Program
{
static void Main()
{
int num = 10;
int res = checked(num + 2);
Console.WriteLine(res);
}
}
Результат выполнения кода:
12