Приветствующиеся сегодня, я делал какой-то код инициализации сегодня, и думал, почему не использовать оператор 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;
}