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