Search Issue Tracker

Fixed

Votes

1

Found in

4.3.0b2

Issue ID

563858

Regression

No

Null coalescing operator does not work for the Transform component

Scripting

-

Steps to reproduce :

- import the project attached
- open the scene
- press play and notice the message in the console :

Should not be null: null
UnityEngine.Debug:Log(Object)
NullCoalescingOperatorTest:Awake() (at Assets/NullCoalescingOperatorTest.cs:12)

Comments (6)

  1. k76

    Oct 13, 2019 06:11

    Still not fixed as of Unity 2019.1.1f1. For example, if my Renderer component (m_Renderer) has been destroyed, the following code will not work as it should:

    return m_Renderer?.enabled ?? false; // throws a MissingReferenceException

    Instead I have to do it like this:

    if (m_Renderer != null)
    {
    return m_Renderer.enabled;
    }
    return false;

  2. Vapid-Linus

    Feb 27, 2018 10:51

    They wrote about this issue in blog post from 2014:
    https://blogs.unity3d.com/2014/05/16/custom-operator-should-we-keep-it/

    Ctrl-F "?? operator"

  3. DouglasPotesta

    Aug 31, 2017 15:31

    This is not fixed.
    mMeshRend = mMeshRend ?? GetComponent<MeshRenderer>();
    mMeshFilter = mMeshFilter ?? GetComponent<MeshFilter>();
    mMesh = mMesh ?? mMeshFilter.sharedMesh;
    mVerts = mMesh.vertices;

    Null coalescing is only useful for cleaning up code, so it is not imperative, but it is nice to have. It should be a fairly quick to fix too.

  4. OndrejP

    Jul 29, 2017 10:23

    The problem:
    A) a != null ? a : b
    B) a ?? b

    A) Uses Object.operator==(), which is overridden for Object
    B) Uses object.ReferenceEquals()

    The reason why it's different is because overridden operator considers "empty" objects and "null" equals. I guess Unity uses "empty" objects for some reason instead of plain null value.

    It's very annoying and hidden caveat of Unity, I wonder how they fixed it.

  5. scsc

    Jan 02, 2017 23:55

    UnassignedReferenceException when a Transform is not assigned to a script and I try to use a ?? b instead of a != null ? a : b, even though they should be equivalent

  6. AmazingRuss

    Nov 02, 2016 21:53

    This is not fixed.

Add comment

Log in to post comment