Объясните пожалуйста как работает ключевое checked в данном примере, в 1-ом просто выйдет 0 в консоли из-за переполнения, во втором же программа и вовсе не запустится. Но понять логику почему в первом примере она запускается, а во втором происходит System.OverflowException не могу.
1)
byte x = byte.MaxValue;
byte z = (byte) checked(x + 1);
Console.WriteLine(z);
2)
byte x = byte.MaxValue;
byte z = checked((byte) (x + 1));
Console.WriteLine(z);
Я думаю вас обманул оператор '+' который возвращет int, в данном случае. В следствии чего в первом варианте вы просто не верно используете оператор checked.
Разберем эту строку
1. byte z = (byte) checked(x + 1);
Вот какую последовательность выполнит компилятор.
2. int tempVariable = checked(x + 1);
3. byte z = (byte) tempVariable
В строке 2. нету переполнения так как результатом будет int. В строке 3. вполне легальный кастинг к byte
Почему же 'x + 1' возвращает int? Если коротко то он просто так работает. Этот оператор перегружен для int и нету для byte. Потому даже такой код будет вам говорить об ошибке:
byte a = 2;
byte b = 1;
byte c = a + c;
И требовать что бы 'c' было int.
Ключевое слово checked используется для явного включения проверки переполнения при выполнении арифметических операций и преобразований с данными целого типа. То есть во время выполнения вашего кода будет создано исключение.
Источник: https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/keywords/checked
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Примеров сортировки по столбцам ListView с отображением треугольника в какую сторону идёт сортировка, я нашёл достаточноНо они все подразумевают...
Есть подобный аналог в c#, а то падает читаемость кода при 999+ строк кода
Хочу реализовать прыжок по двойному нажатию в определенной областиКак считать первое и следующие нажатие по экрану чтобы проверить что...
Вопрос вроде простой, но я так не понял, как сделать: хочу сделать тоже самое, что делается при запуске/сборке приложения из visual studio, но только...