Как сделать ссылочный тип обнуляемым в C# 7.3? - PullRequest
0 голосов
/ 22 апреля 2020

Пока не могу обновить Net. Я хочу достичь этого public SiteOptionModel? Site { get; set; } как bool?. Но там написано, что я должен обновить. Net, но я боюсь, что обновление. Net разрушит довольно большой проект. Есть ли способ добиться этого?

public bool IsVisibleInGrid { get; set; }
public SiteOptionModel? Site { get; set; }
public bool? IsDeleted { get; set; }

Запрос LinQ, показывающий ошибку, не имеющую SiteId

from truck in database.Truck
   where truck.CarrierId == carrierId
         && (truck.IsDeleted == null || truck.IsDeleted == false)
   orderby truck.Code
   select new CarrierDetailViewModel.TruckModel2
   {
       Id = truck.TruckId,

       Site = new CarrierDetailViewModel.SiteOptionModel{
            Id = (int)truck.SiteId,
            Name = truck.Site.Name,
            Code = truck.Site.Code
       }
   } ;

Ошибка

Код серьезности Описание Ошибка состояния подавления строки файла проекта CS8370 Функция 'типы ссылочных значений, допускающие обнуление' недоступна в C# 7.3. Пожалуйста, используйте языковую версию 8.0 или выше.

1 Ответ

0 голосов
/ 22 апреля 2020

Компилятор просит вас использовать более новую версию языка, а не более новую версию. NET. Каждая версия. NET поддерживает обнуляемые типы ссылок. Ссылки могут быть нулевыми в любой версии. NET, вы просто не могли аннотировать это в C# до C# 8.0.

Однако ваш проект настроен для C# 7.3, вы нужно сменить языковую версию. Пожалуйста, обратитесь к Как включить функцию Nullable Reference Types C# 8.0 для всего проекта .

См. Также В чем разница между C# и. NET?

Как только ваш проект настроен для C# 8.0 и с включенными типами ссылок Nullable… Roslyn, компилятор C#, будет понимать аннотации обнуляемости и обеспечивать анализ кода на их основе.

И вам все равно придется иметь дело с нулем. Что может означать нулевые проверки. Доступ к элементу нулевой ссылки по-прежнему NullReferenceException, даже в C# 8.0. По крайней мере, анализ stati c поможет вам.

См. Что такое исключение NullReferenceException и как его исправить? .


Если есть вероятность, что вам действительно потребуется запустить новые функции в старой среде выполнения (например, async / await in. NET 2.0), у меня может быть решение для вас: Theraot. ядро . Из которых, полное раскрытие, я автор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...