Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
Для обработки условий переполнения и потери значимости в приложении доступны два способа. Это можно делать вручную, полагаясь на свои знания и навыки в области программирования. Недостаток такого подхода произрастает из того факта, что мы всего лишь люди, и даже приложив максимум усилий, все равно можем попросту упустить из виду какие-то ошибки.
К счастью, язык C# предоставляет ключевое слово
checkedcheckedЕсли происходит переполнение, тогда во время выполнения генерируется исключение
System.OverflowExceptiontrycatchstatic void ProcessBytes(){ byte b1 = 100; byte b2 = 250;<b> // На этот раз сообщить компилятору о необходимости добавления</b><b> // кода CIL, необходимого для генерации исключения, если возникает</b><b> // переполнение или потеря значимости.</b> try { byte sum = checked((byte)Add(b1, b2)); Console.WriteLine("sum = {0}", sum); } catch (OverflowException ex) { Console.WriteLine(ex.Message); }}Обратите внимание, что возвращаемое значение метода
Add()checkedsumbyteMessageArithmetic operation resulted in an overflow.Арифметическая операция привела к переполнению.
Чтобы обеспечить принудительную проверку переполнения для целого блока операторов, контекст
checkedtry{ checked { byte sum = (byte)Add(b1, b2); Console.WriteLine("sum = {0}", sum); }}catch (OverflowException ex){ Console.WriteLine(ex.Message);}В любом случае интересующий код будет автоматически оцениваться на предмет возможных условий переполнения, и если они обнаружатся, то сгенерируется исключение, связанное с переполнением.
Настройка проверки переполнения на уровне проекта
Если создается приложение, в котором никогда не должно возникать молчаливое переполнение, то может обнаружиться, что в контекст ключевого слова
checked/checkedchecked<PropertyGroup> <CheckForOverflowUnderflow>true</CheckForOverflowUnderflow></PropertyGroup>Настройка проверки переполнения на уровне проекта (Visual Studio)
Для активизации флага
/checked/checked
На заметку! Если вы не выберете в списке вариант All Configurations, тогда настройка будет применена только к конфигурации, выбранной в текущий момент (т.е Debug (Отладка) или Release (Выпуск)).
Использование ключевого слова unchecked
А теперь предположим, что проверка переполнения и потери значимости включена в масштабах проекта, но есть блок кода, в котором потеря данных приемлема. Как с ним быть? Учитывая, что действие флага
/checkeduncheckeduncheckedchecked// Предполагая, что флаг /checked активизирован, этот блок// не будет генерировать исключение времени выполнения.uncheckedПохожие книги на "Язык программирования C#9 и платформа .NET5", Троелсен Эндрю
Троелсен Эндрю читать все книги автора по порядку
Троелсен Эндрю - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mir-knigi.info.