Lazy properties initialization with null coalescing C# with Example
operator private List _fooBars; public List FooBars { get { return _fooBars ?? (_fooBars = new List()); } } The first time the property .FooBars is accessed the _fooBars variable will evaluate as null, thus falling through to the assignment statement assigns and evaluates to the resulting value. Thread safety This is not thread-safe way of implementing lazy properties. For thread-safe laziness, use the Lazy class built into the .NET Framework. C# 6 Syntactic Sugar using expression bodies Note that since C# 6, this syntax can be simplified using expression body for the property: private List _fooBars; public List FooBars => _fooBars ?? ( _fooBars = new List() ); Subsequent accesses to the property will yield the value stored in the _fooBars variable. Example in the MVVM pattern This is often used when implementing commands in the MVVM pattern. Instead of initializing the commands eagerly with the construction of a viewmodel, commands are lazily initialized using this pattern as follows: private ICommand _actionCommand = null; public ICommand ActionCommand => _actionCommand ?? ( _actionCommand = new DelegateCommand( DoAction ) );