Looking for c# Keywords? Try Ask4Keywords

C# Language Инициализация ленивых свойств с помощью оператора нулевой коалесценции


пример

private List<FooBar> _fooBars;

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

Первый раз , когда недвижимость .FooBars осуществляется доступ к _fooBars переменному будет оценивать , как null , таким образом , падает через к правопреемникам оператора присваивания и оценивает к полученному значению.

Безопасность резьбы

Это не потокобезопасный способ реализации ленивых свойств. Для поточнобезопасной лени используйте класс Lazy<T> встроенный в .NET Framework.

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 ) );