Ответ 1
Для тех, кто в конечном итоге здесь.
Вы можете поместить #nullable enable
поверх файла для файлового подхода, как предложено @Marc в комментариях.
Вы также можете использовать комбинации #nullable включения/выключения, чтобы комментировать только части файла
class Program
{
static void Main(string[] args)
{
#nullable enable
string? message = "Hello World";
#nullable disable
string message2 = null;
Console.WriteLine(message);
Console.WriteLine(message2);
}
}
Здесь ссылка на документы. https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references#nullable-contexts
Обнуляемые контексты позволяют детально контролировать как компилятор интерпретирует переменные ссылочного типа. обнуляемый контекст аннотации любой заданной строки источника -
enabled
илиdisabled
. Вы можете думать о компиляторе до С# 8 как о компиляции всего вашего кода вdisabled
обнуляемый контекст: любой ссылочный тип может быть нулевым. контекст предупреждений обнуляемости может быть установлен наenabled
,disabled
илиsafeonly
. Обнуляемый контекст предупреждений определяет предупреждения генерируется компилятором с использованием анализа потока.Обнуляемый контекст аннотации и обнуляемый контекст предупреждения могут быть установить для проекта с использованием элемента
Nullable
в вашем Файлcsproj
. Этот элемент определяет, как компилятор интерпретирует Обнуляемость типов и какие предупреждения генерируются. Допустимые настройки являются:
enable
: контекст аннулируемой аннотации включен. Обнуляемый контекст предупреждения включен. Переменные ссылочного типа, например,string
, не могут обнуляться. Все предупреждения об обнуляемости включены.disable
: контекст аннулируемой аннотации отключен. Контекст предупреждения обнуляемый отключен. Переменные ссылочного типа не обращают внимания, как и более ранние версии С#. Все предупреждения об обнуляемости отключены.safeonly
: контекст аннулируемой аннотации включен. Контекст предупреждения обнуляемый безопасен. Переменные ссылочного типа не обнуляются. Все предупреждения о нарушении безопасности включены.warnings
: контекст аннулируемой аннотации отключен. Контекст предупреждения обнуляемый включен. Переменные ссылочного типа не обращают внимания. Все предупреждения об обнуляемости включены.safeonlywarnings
: контекст аннулируемой аннотации отключен. Контекст предупреждения обнуляемый безопасен. Переменные ссылочного типа не обращают внимания. Все предупреждения о нарушении безопасности включены.Вы также можете использовать директивы для установки этих же контекстов в любом месте вашего проекта:
#nullable enable
: Устанавливает контекст аннулируемой аннотации и контекст предупреждающего обнуления на включенный.
#nullable disable
: устанавливает для контекста обнуляемой аннотации и контекста обнуляемого предупреждения значение отключено.
#nullable safeonly
: установите для включаемого контекста аннотации значение NULL, а для контекста предупреждения - safeonly.
#nullable restore
: Восстанавливает контекст аннулируемой аннотации и контекст предупреждающего обнуления в настройках проекта.
#pragma warning disable nullable
: установите для недопустимого контекста предупреждения значение отключено.
#pragma warning enable nullable
: установите для предупреждающего контекста значение enabled.
#pragma warning restore nullable
: восстанавливает обнуляемый контекст предупреждения в настройках проекта.
#pragma warning safeonly nullable
: Устанавливает контекст предупреждения обнуляемости на safeonly.Обнуляемая по умолчанию аннотация и контексты предупреждения
disabled
. Это решение означает, что ваш существующий код компилируется без изменения и без создания новых предупреждений.Различия между контекстами предупреждений
enabled
иsafeonly
являются предупреждениями для назначения обнуляемой ссылки для необнуляемой ссылки.
или, чтобы включить этот проект, необходимо добавить
<Nullable>enable</Nullable>
в файл вашего проекта.
Должно выглядеть так:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>
и преобразовать эти предупреждения в ошибки - добавьте
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
в файл вашего проекта
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.2</TargetFramework>
<LangVersion>8.0</LangVersion>
<Nullable>enable</Nullable>
<WarningsAsErrors>CS8600;CS8602;CS8603</WarningsAsErrors>
</PropertyGroup>
</Project>
CS8600: преобразование пустого литерала или возможного нулевого значения в ненулевой тип.
CS8602: возможное разыменование нулевой ссылки.
CS8603: возможен возврат нулевой ссылки.