使用 null 合併運算子初始化延遲屬性

private List<FooBar> _fooBars;

public List<FooBar> FooBars
{
    get { return _fooBars ?? (_fooBars = new List<FooBar>()); }
}

第一次訪問屬性 .FooBars 時,_fooBars 變數將評估為 null,因此通過賦值語句分配並評估結果值。

執行緒安全

不是實現惰性屬性的執行緒安全方法。對於執行緒安全的懶惰,請使用 .NET Framework 中內建的 Lazy<T> 類。

C#6 使用表達體的語法糖

請注意,從 C#6 開始,可以使用屬性的表示式主體簡化此語法:

private List<FooBar> _fooBars;

public List<FooBar> FooBars => _fooBars ?? ( _fooBars = new List<FooBar>() );

對屬性的後續訪問將產生儲存在 _fooBars 變數中的值。

MVVM 模式中的示例

在 MVVM 模式中實現命令時經常使用此方法。使用此模式延遲初始化命令,而不是通過構建檢視模型急切地初始化命令,如下所示:

private ICommand _actionCommand = null;
public ICommand ActionCommand =>
   _actionCommand ?? ( _actionCommand = new DelegateCommand( DoAction ) );