Приветствую, что сегодня я делал ленивый код инициализации, и подумал, почему бы не использовать оператор с нулевым коалесцентом для этого, он короче, но тогда я подумал, что есть какие-то накладные расходы или дополнительные затраты для этого.
Ниже приведен упрощенный пример кода, показывающий более общую форму, используемую для ленивой инициализации, а затем с использованием оператора нулевой коалесценции. Они имеют одинаковые результаты и выглядят эквивалентными. Мои первые мысли состоят в том, что после создания объекта теперь есть дополнительное назначение для себя, используя ??
. Это не проблема, и компилятор /JIT оптимизирует это как-то, есть ли что-то более гнусное, и вы никогда не должны делать ленивую инициализацию с помощью ??
, или это абсолютно безопасно, и от него не может быть плохого mojo.
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;
}