Любые веские причины не использовать нулевой оператор для ленивой инициализации?

Приветствующиеся сегодня, я делал какой-то код инициализации сегодня, и думал, почему не использовать оператор NULL-Coalescing, чтобы сделать это, он короче, но потом я думал, что есть накладные расходы или дополнительные расходы, чтобы сделать это таким образом.

Ниже приведен упрощенный код образца, показывающий более распространенную форму, используемую для ленивой инициализации, а затем, используя оператор NULL-Coalescing. Они имеют одинаковые результаты и кажутся эквивалентными. Мои первые мысли состоят в том, что после того, как объект создан, сейчас есть дополнительное назначение его для себя, используя ?? . Это не проблема, и компилятор / JIT оптимизирует это некоторые, как есть что-то более немадие, и вы никогда не должны делать ленивый инициализацию с ?? , или это совершенно безопасно, и нет плохого мода прийти от этого.

private MyLazyObject _lazyObject;

public MyLazyObject GetMyLazyObjectUsingMoreCommonMethod()
{
    if (_lazyObject != null)
        return _lazyObject;

    _lazyObject = new MyLazyObject();

    return _lazyObject;
}

public MyLazyObject GetMyLazyObjectUsingNullCoalescingOpMethod()
{
    _lazyObject = _lazyObject ?? new MyLazyObject();
    return _lazyObject;
}
13
задан Rodney S. Foley 13 September 2011 в 21:29
поделиться