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 шт):

Автор решения: Alexander Petrov

По умолчанию проверка на 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 и задать там нужные коды ошибок.

→ Ссылка