One-line lazy initialization

Is this too obscure?

public class MyObject
{
    private MyExpensiveObject _myExpensiveObject;

    public MyExpensiveObject ExpensiveObject
    {
        get { return _myExpensiveObject ??
                     (_myExpensiveObject = new MyExpensiveObject()); }
    }
}

Comments (4)

  1. Jan! wrote::

    No, seems perfectly clear to me.

    Tuesday, February 23, 2010 at 11:24 pm #
  2. Eber wrote::

    I use that all the time, even for non-expensive objects

    Thursday, February 25, 2010 at 8:50 am #
  3. Brunhilde wrote::

    Gets my vote.

    Monday, November 8, 2010 at 1:50 pm #
  4. Chaz wrote::

    Wish JS had this, amazing shorthand :)

    Wednesday, June 15, 2011 at 4:11 pm #