Какие способы предотвращения и лечения арифметического переполнения в С#?
А Преобразование арифметического переполнения (логическая ошибка) в ошибку времени выполнения?
Я хочу как минимум 3 способа решить эту проблему!
Вы можете использовать checked.
int z = 0;
try
{
// The following line raises an exception because it is checked.
z = checked(maxIntValue + 10);
}
catch (System.OverflowException e)
{
// The following line displays information about the error.
Console.WriteLine("CHECKED and CAUGHT: " + e.ToString());
}
// The value of z is still 0.
return z;
см. пример и пояснения по адресу http://msdn.microsoft.com/en-us/library/74b4xzyw.aspx
Больше способов сделать это по запросу OP:
Вы также можете использовать Int32.MaxValue
(для арифметики int), чтобы проверить, может ли операция вызвать переполнение, либо либо выбросить свое собственное исключение, либо System.OverflowException
Что-то вроде if ((Int32.MaxValue - x) < y) throw new Exception()
checked
получил больше словесного обслуживания. Это феноменальная особенность.