На конференции по обновлению в Праге, которую недавно посетили некоторые из нас из Payments at Collector bank, одной из наиболее интересных сессий, на которую мы были, был разговор Джарода Паерсонса о «пустых ссылочных типах».

Нулевые ссылочные типы - это новая функция, представленная в C # 8, которая помогает вам находить в коде ошибки, связанные с нулевым значением.
Вы можете думать об этом как о подсказках (одетых как предупреждения), где во время выполнения могут возникать потенциальные исключения NullReferenceExceptions.

Включение возможности обнуления

Когда вы используете C # 8, довольно легко включить эту функцию, включив либо весь проект, либо конкретный файл.

Включить это в файлах так же просто, как просто написать «#nullable enable» вверху.

У вас также есть возможность включать и отключать эту функцию в частях файла, например, при работе с большими файлами.

Предупреждения и устранение неполадок

После включения вы начнете получать предупреждения о потенциальных проблемах с нулевым значением в вашем коде.

Большинство из них легко исправить, решив, могут / должны ли свойства когда-либо быть нулевыми или нет.

Например, это предупреждение для свойства Name

Можно исправить, отметив свойство как допускающее значение NULL.

Или инициализировать эти значения в конструкторе

Если свойство не помечено как допускающее значение NULL, вы получите предупреждение при попытке установить для свойства значение NULL.

При необходимости также можно игнорировать предупреждения, используя восклицательный знак.
Хорошим примером этого является, например, использование по умолчанию

Использование до сих пор в наших проектах

Из-за довольно большой базы кода мы на раннем этапе решили, что наш подход на данный момент будет заключаться в том, чтобы разрешить использование значений NULL в файлах при изменении или добавлении чего-то нового.

На самом деле мы сначала пытались включить обнуляемость для всех проектов в нашем крупнейшем решении, но были заглушены предупреждениями.

Мы использовали эту функцию в большинстве наших проектов для продукта Collector Checkout уже пару недель, и пока наша команда пользуется этой функцией.
Это отличный инструмент, позволяющий находить случаи, которые часто упускаются из виду, и улучшать качество кода.

Даже если мы проводим обзоры кода для всех наших коммитов и имеем отличное тестовое покрытие в наших различных проектах, нам уже удалось найти пару проблем при включении этой функции в существующем коде.

В общем, отличная функция!