Присваивание с объединением 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.