UnassignedReferenceException, даже если используется нулевой условный оператор - PullRequest
0 голосов
/ 30 апреля 2018

Я получаю UnassignedReferenceException: The variable _Preset of Foo has not been assigned., хотя использую нулевой условный оператор ?..

Мой код:

// […]
myTarget.Preset?.ApplyTo(myTarget);

Я также замечаю, что здесь упоминается _Preset вместо Preset (что я считаю странным).

Код в Foo.cs:

[CreateAssetMenu()]
public class Foo : ScriptableObject
{
    [SerializeField] private Preset _Preset = null;

    public Preset Preset
    {
        get { return _Preset; }
        protected set { _Preset = value; }
    }
}

Что я делаю не так? Разве это не то, для чего оператор?

Поиск в Google не помог.

1 Ответ

0 голосов
/ 30 апреля 2018

В Unity есть собственный способ проверки ссылок инспектора на ноль.

Когда у MonoBehaviour есть поля, только в редакторе [1] мы устанавливаем для этих полей не «реальный ноль», а объект «фальшивый нуль». Наш пользовательский оператор == может проверить, является ли что-то одним из этих поддельных нулевых объектов, и ведет себя соответственно

Возможно, они не перегружены нулевым условным оператором. Ваше свойство get возвращает «поддельный ноль», объясняющий вашу неназначенную ошибку (а не исключение NullReferenceException).

Настраиваемая проверка нуля также имеет ряд недостатков. Он ведет себя несовместимо с оператор, который также выполняет нулевую проверку, но выполняет чистую проверку c # null и не может быть обойден для вызова нашей пользовательской нулевой проверки.

Полагаю, такая же проблема возникает для оператора с нулевым условием.

...