【发布时间】:2016-11-11 00:51:36
【问题描述】:
我怎样才能写出以下场景的简写?
get
{
if (_rows == null)
{
_rows = new List<Row>();
}
return _rows;
}
【问题讨论】:
-
您的代码原样正常。它可以缩短,但以可读性为代价。在我看来,节省 3 行是不值得的。
-
我并不喜欢这种模式。你有一个产生状态变化的吸气剂
-
@BradThomas 在某些模式下还不错。问题中的示例看起来有点像惰性求值:get 不会改变对象的外部状态。只要不从其他地方访问
_rows,那就是... -
@KABoissonneault 而且只要这个对象不会被多个线程同时读取
-
@Tavian。问题比这更隐蔽。对于 getter 的使用者来说,能够假设对象在读取属性之前和之后处于相同状态通常是有好处的。否则可能会出现令人惊讶的副作用,违反最小惊讶原则。
标签: c# null-coalescing-operator null-coalescing