问候我今天做了一些懒惰的初始化代码,并想为什么不使用 null-coalescing 运算符来执行此操作,它更短,但后来我想这样做是否有任何开销或额外成本。
下面是简化的示例代码,显示了用于延迟初始化的更常见的形式,然后是使用空合并运算符的形式。它们具有完全相同的结果,并且看起来相同。我的第一个想法是,在创建对象之后,现在使用??
. 这是否不是问题,编译器/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;
}