Правильно ли я понимаю, что следующие конструкции должны быть эквивалентны:
MeshCollider collider = go.GetComponent<MeshCollider>();
MeshCollider meshCollider = collider != null ? collider : go.AddComponent<MeshCollider>();
и
MeshCollider collider = go.GetComponent<MeshCollider>();
MeshCollider meshCollider = collider ?? go.AddComponent<MeshCollider>();
Если да, то почему первая конструкция работает, а во второй я получаю null?
EDIT: Давайте так:
MeshCollider collider = go.GetComponent<MeshCollider>();
//Выводит True, логично поскольку MeshCollider ещё не установлен
Debug.Log(collider == null);
//Выводит False, логично поскольку MeshCollider ещё не установлен
Debug.Log(collider != null);
MeshCollider newCollider = go.AddComponent<MeshCollider>();
//Выводит False, логично поскольку MeshCollider теперь установлен
Debug.Log(newCollider == null);
//Выводит True, логично поскольку MeshCollider теперь установлен
Debug.Log(newCollider != null);
MeshCollider meshCollider1 = collider != null ? collider : newCollider;
MeshCollider meshCollider2 = collider == null ? newCollider : collider;
MeshCollider meshCollider3 = collider ?? newCollider;
//Не логично
//Выводит Test (UnityEngine.MeshCollider), Test (UnityEngine.MeshCollider), null
Debug.LogFormat("{0}, {1}, {2}", meshCollider1, meshCollider2, meshCollider3);
Как и предполагал @АртёмОконечников в комментариях - проблема в перегрузке операторов ==
и !=
.
Конструкция ??
сравнивает экземпляр левого операнда с null
.
Но разработчики Unity решили переопределить UnityEngine.Object.operator ==
так, чтобы 'неинициализированный' экземпляр (который !destroyed
) UnityEngine.Object
и всех его потомков возвращал true
при сравнении с null
.
Например:
MeshCollider collider = new MeshCollider();
print(collider == null); //Выведет True
Таким образом конструкция ??
работает не так как ожидается, если операторы сравнения перегружены
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Не пойму, почему выбивает ошибку? Скобки все на месте
Привет!Я настроил роутинг сайта на Reactjs и без WordPress все работало,но как я закинул на WordPress то он не понимает откуда ему взять файлы