Search
Write a publication
Pull to refresh

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

Level of difficultyEasy
Reading time2 min
Views2.3K

? Что такое 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

Tags:
Hubs:
Total votes 6: ↑3 and ↓3+2
Comments5

Articles