Start Debugging
2020-04-05 Обновлено 2023-11-05 csharp Edit on GitHub

Присваивание с объединением null ??= в C# 8.0

Узнайте, как работает оператор присваивания с объединением null (??=) в C# 8.0, на практических примерах вроде кеширования и условного присваивания.

Этот оператор позволяет присвоить значение правого операнда левому операнду только в том случае, если значение левого операнда оказывается null.

Очень простой пример:

int? i = null;

i ??= 1;
i ??= 2;

В примере выше мы объявляем переменную int, допускающую null, i и выполняем над ней два присваивания с объединением null. При первом присваивании i равно null, а значит i будет присвоено значение 1. При следующем присваивании i уже равно 1 - что не является null - поэтому присваивание будет пропущено.

Как и следовало ожидать, значение правого операнда вычисляется только в том случае, если левый операнд равен null.

int? i = null;

i ??= Method1();
i ??= Method2(); // Method2 is never called because i != null

Сценарии использования

Оператор помогает упростить код и сделать его читаемее в ситуациях, где обычно приходится проходить через разные ветки if, пока не будет установлено значение определённой переменной.

Один из таких примеров - кеширование. В примере ниже вызов GetUserFromServer будет выполнен только тогда, когда после попытки получить user из кеша он по-прежнему останется null.

var user = GetUserFromCache(userId);
user ??= GetUserFromServer(userId);

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад