Включаем Nullable reference types в Unity за несколько минут

от автора

? Что такое Nullable reference types

Nullable reference types допускает присваивать значение null ссылочным типам.

? Какие преимущества дает концепция ссылочных nullable-типов

  • Design time анализ

  • Четкие контракты API

  • Проверка Null состояния статическим анализом IDE, помогает устранить исключения System.NullReferenceException

? Требования

  • .NET Standard 2.1+

  • Unity 2021+

? Как включить статический анализ

Для анализа отдельных сборок


Создаем файл csc.rsp рядом со сборкой asmdef :

В содержимое csc.rsp добавляем аргумент nullable :

-nullable:enable

Для анализа отдельных .cs файлов


В содержимое .cs добавляем контекст аннотаций #nullable :

#nullable enable  namespace Sandbox.Domain {     public struct User     {         public int Id { get; set; }         public string Nickname { get; set; }         public string? Phone { get; set; }     } }

Использование Nullable типа в свойстве Phone, указывает что значение можно не присваивать.

? Руководство по миграции

Если заранее известно, что объекты инициализируется внешними сервисами, подавляем предупреждения анализатора с помощью null-forgiving оператора !.

Unity UI бинды:

[SerializeField] private Image _image = null!;

DI VContainer атрибуты:

namespace Sandbox.Domain {     private MoveController _moveController = null!;      [Inject]     public void Init(MoveController moveController)     {         _moveController = moveController;     } }

Чтобы исключить из анализа отдельную часть кода, воспользуйтесь следующей аннотацией:

#nullable disable  using System;  namespace Sandbox.Server.Responses {     [Serializable]     public class UserResponse     {         public int Id;         public string Name;     } }

? Полезные ссылки

Nullable reference types in Unity
NullReferenceException = ♥ 
Microsoft guide


ссылка на оригинал статьи https://habr.com/ru/articles/786082/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *