В чём разница между операторами ??, ??= и ?. в C#?

В C# существуют три оператора, которые имеют отношение к обработке нулевых значений: ??, ??= и ?.

Оператор ??, известный как оператор объединения с null, используется для задания значения по умолчанию, которое будет использоваться, если переменная имеет значение null. Синтаксис этого оператора выглядит следующим образом:

var result = someValue ?? defaultValue;

Здесь someValue - это переменная, которую мы проверяем на null, и defaultValue - значение, которое будет присвоено переменной result, если someValue равно null. Таким образом, оператор ?? позволяет нам заполнить отсутствующие значения, указав альтернативное значение по умолчанию.

Оператор ??= называется оператором присваивания значения по умолчанию и используется для присвоения значения переменной, только если она имеет значение null. Использование оператора ??= сокращает код и делает его более читабельным. Пример использования выглядит следующим образом:

someVariable ??= defaultValue;

Здесь someVariable - это переменная, которую мы проверяем на null, и defaultValue - значение, которое будет присвоено переменной someVariable, только если она равна null. Если someVariable не равно null, то оператор ??= не делает ничего.

Оператор ?. известен как условное обращение к члену (null-условный оператор) и используется для выполнения операции только в том случае, если переменная не имеет значения null. Этот оператор предотвращает возникновение ошибки NullReferenceException, которая может произойти, если мы попытаемся обратиться к члену объекта, который имеет значение null. Использование оператора ?. позволяет нам безопасно обратиться к членам объекта, проверив, не равен ли объект null. Пример использования выглядит следующим образом:

var result = someObject?.SomeMethod();

Здесь someObject - это переменная, у которой мы хотим вызвать метод SomeMethod(), и result - переменная, в которую будет сохранено возвращаемое значение метода. Если someObject равен null, то результатом операции будет значение null, а метод SomeMethod() не будет вызван. Если someObject не равен null, то метод SomeMethod() будет вызван и результат будет сохранен в переменной result.

Таким образом, операторы ??, ??= и ? позволяют нам работать с нулевыми значениями и обезопасить себя от возможных ошибок при работе с ними. Это удобные инструменты, которые упрощают обработку нулевых значений в C#.