Я начинаю новый проект .Net Core и не могу понять, как мне реализовать нулевые ссылочные типы для пакетов nuget.

По сути, я могу создать класс в проекте и определить, является ли строка нулевой или нет.

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

Так что мне с этим делать? Идеальный мир далеко впереди?

Вот пример. Загрузите пакет nuget RestSharp.

Напишите эту строку

var response = new RestClient().ExecuteGetAsync(new RestRequest());

var myNullVariable = response.ErrorException;

Visual Studio не сообщает вам, что он может быть нулевым.


person Alex Sapozhnikov    schedule 15.01.2020    source источник
comment
Можете ли вы поделиться соответствующим кодом здесь?   -  person Chetan Ranpariya    schedule 15.01.2020
comment
строка уже обнуляема: stackoverflow.com/questions/32853482/   -  person Joel Wiklund    schedule 15.01.2020
comment
Да, он может быть нулевым, но Visual Studio 2019 имеет ссылочные типы, допускающие значение NULL, и вы можете указать, является ли он нулевым или нет для intellisense.   -  person Alex Sapozhnikov    schedule 15.01.2020


Ответы (1)


Ссылки могут находиться в одном из трех состояний:

  1. Обнуляемый
  2. Не обнуляемый
  3. забывчивый

Первые два (относительно) очевидны. Последнее состояние не существовало бы, если бы NRT была введена в .NET 1.0, и существует только для обратной совместимости. При использовании неаннотированного кода (будь то в ваших собственных проектах или через пакет NuGet) его ссылки считаются не допускающими значения NULL. Эти ссылки проходят через ваш код точно так же, как и до введения NRT.

Все это говорит о том, что любой пакет, на который вы ссылаетесь, должен будет аннотировать свой код, прежде чем вы сможете в полной мере воспользоваться преимуществами NRT при работе с ним.

person Drew Noakes    schedule 25.04.2020