Оператор `??=` используется для задания значения по умолчанию в случае, если проверяемая переменная имеет значение null.
Он проверяет значение левого операнда, и если оно не равно null, то возвращает его. Если же значение левого операнда равно null, то возвращается значение правого операнда.
Пример использования null-coalescing operator:
```csharp
string userProvidedValue = null;
string defaultValue = "Default";
// Использование null-coalescing оператора
string result = userProvidedValue ?? defaultValue;
```
В данном примере переменная userProvidedValue равна null, поэтому оператор ?? вернет значение переменной defaultValue, и переменная result будет равна "Default". Если бы переменная userProvidedValue имела значение отличное от null, то result было бы равно этому значению.
<br>
Null-coalescing operator можно использовать для сокращения кода и замены конструкций вида:
```csharp
string result = userProvidedValue != null ? userProvidedValue : defaultValue;
```
<br>
на более короткую и удобную форму:
```csharp
string result = userProvidedValue ?? defaultValue;
```
### null-coalescing assignment operator (оператор присваивания с объединением с null)
Оператор `??=` присваивает значение правого операнда переменной слева, только если левый операнд равен null.
Пример использования оператора ??=:
```csharp
string userProvidedValue = null;
string defaultValue = "Default";
userProvidedValue ??= defaultValue;
```
В данном примере, если переменная userProvidedValue равна null, то значение переменной defaultValue будет присвоено переменной userProvidedValue. В результате выполнения этого кода переменная userProvidedValue будет равна "Default". Если бы переменная userProvidedValue имела значение отличное от null, то оператор ??= бы не изменил ее значение.
<br>
Оператор ??= полезен для сокращения кода и избавления от необходимости явно проверять переменную на равенство null перед присваиванием значения. Этот оператор может быть использован вместо следующей конструкции:
```csharp
if (userProvidedValue == null)
{
userProvidedValue = defaultValue;
}
```
<br>
Объяснил ChatGPT-4
[Оф. документация](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator)