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