Для тех, кто в конечном итоге здесь.Вы можете поместить #nullable enable
поверх файла для файлового подхода, как предложено @Marc в комментариях.
Вы также можете использовать комбинации #nullable enable / disable для аннотирования только частейфайл
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
.Вы можете думать о компиляторе до C # 8 как о компиляции всего вашего кода в disabled
обнуляемом контексте: любой ссылочный тип может быть нулевым. контекст предупреждений обнуляемых предупреждений может быть установлен на enabled
, disabled
или safeonly
.Контекст обнуляемых предупреждений определяет предупреждения, сгенерированные компилятором с использованием его анализа потока.
Контекст обнуляемой аннотации и контекст обнуляемого предупреждения могут быть установлены для проекта с использованием элемента Nullable
в вашем файле csproj
.Этот элемент настраивает, как компилятор интерпретирует обнуляемость типов и какие предупреждения генерируются.Допустимые значения:
enable
: контекст аннулируемой аннотации включен .Контекст предупреждения обнуляемый: enabled .Переменные ссылочного типа, например string
, не обнуляются.Все предупреждения об обнуляемости включены. disable
: контекст обнуляемой аннотации отключен .Контекст предупреждения обнуляемый: отключен .Переменные ссылочного типа не обращают внимания, как и более ранние версии C #.Все предупреждения об обнуляемости отключены. safeonly
: контекст аннулируемой аннотации включен .Контекст предупреждения обнуляемый: safeonly .Переменные ссылочного типа не обнуляются.Все предупреждения безопасности обнуляются. warnings
: Контекст аннулирования аннотации отключен .Контекст предупреждения обнуляемый: enabled .Переменные ссылочного типа не обращают внимания.Все предупреждения об обнуляемости включены. safeonlywarnings
: контекст аннулируемой аннотации отключен .Контекст предупреждения обнуляемый: safeonly .Переменные ссылочного типа не обращают внимания.Все предупреждения о нарушении безопасности включены.
Вы также можете использовать директивы для установки этих же контекстов в любом месте вашего проекта:
#nullable enable
: Устанавливает контекст аннулирования аннулирования и контекст предупреждения обнуляемого значения enabled .
#nullable disable
: Устанавливает контекст аннулируемой аннотации и контекст предупреждающего обнуляемого значения отключен .
#nullable safeonly
: Устанавливает контекст аннулируемой аннотации включенным, иконтекст предупреждения для safeonly .
#nullable restore
: восстанавливает контекст аннулирования аннулирования и контекст предупреждения обнуляемого в настройках проекта.
#pragma warning disable nullable
: устанавливает контекст предупреждения обнуляемыйв отключено .
#pragma warning enable nullable
: установить для предупреждения значение Nullable enabled .
#pragma warning restore nullable
: восстановить в контекст предупреждения 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: возможное возвращение нулевой ссылки.