C# 8 .NET core 3.1 nullable types
Почитал я про C# 8. Прочитал то, что ссылочные типы по умолчанию не могут хранить null. Зашел в visual studio. Написал:
string f = null;
f = null;
Console.WriteLine(f);
А оно компилируется...
В настройках проекта стоит .NET core 3.1, а это значит что версия C# - восьмая.
в чем может быть проблема?
Ответы (1 шт):
По умолчанию проверка на nullable отключена. Её можно включить несколькими способами.
Первый. В начале файла добавляем директиву #nullable:
#nullable enable
Второй. В файл конфига вставляем опцию:
<Nullable>enable</Nullable>
Также можно задать эту опцию в командной строке: -nullable (C# Compiler Options).
Для чего сделан первый способ, если можно задать настройку сразу для всего проекта? Для постепенной миграции большой кодовой базы на nullable-типы. Tutorial: Migrate existing code with nullable reference types.
Чтобы дополнительно обезопаситься от ошибок, можно в настройках проекта на вкладке Build установить переключатель Treat warnings as errors в значение All или Specific warnings и задать там нужные коды ошибок.