Ответ 1
Код С# по умолчанию равен unchecked
, так что переполнение будет тихо обходить вокруг, а не бросать исключение.
Вы можете получить исключение, упаковали свой код в блок checked
за счет небольшой производительности.
Добрый день! Я пытался добавить две байтовые переменные и заметил странный результат.
byte valueA = 255;
byte valueB = 1;
byte valueC = (byte)(valueA + valueB);
Console.WriteLine("{0} + {1} = {2}", valueA.ToString(),
valueB.ToString(),
valueC.ToString());
когда я пытался запустить программу, отображается
255 + 1 = 0
Что случилось с вышеуказанным кодом? Почему компилятор не выбрасывает OverflowException
? Как я могу поймать исключение? Я парень VB и медленно мигрирую на С#:) Извините за вопрос.
Код С# по умолчанию равен unchecked
, так что переполнение будет тихо обходить вокруг, а не бросать исключение.
Вы можете получить исключение, упаковали свой код в блок checked
за счет небольшой производительности.
потому что по умолчанию C#
не проверяет переполнение арифметических операций. попробуйте обернуть его с помощью checked
, чтобы он генерировал исключение.
попробуйте следующее:
byte valueA = 255;
byte valueB = 1;
byte valueC = (byte)(valueA + valueB);
Console.WriteLine("Without CHECKED: {0} + {1} = {2}", valueA.ToString(),
valueB.ToString(),
valueC.ToString());
try
{
valueC = checked((byte)(valueA + valueB));
Console.WriteLine("With CHECKED: {0} + {1} = {2}", valueA.ToString(),
valueB.ToString(),
valueC.ToString());
}
catch (Exception e)
{
Console.WriteLine("With CHECKED: " + e.GetType());
}