Найти тему
31 подписчик

Присваивание объединения со значением NULL


У нас скоро (очень скоро) выйдет курс по нововведениям языка C# – PRO C#. Эволюция языка. Хочу вас ввести в курс дела. Я считаю каждый уважающий себя C# разработчик должен знать историю развития своего главного инструмента для написания программ - язык C#.

Расскажу об одной прикольной фиче из C# 8 версии.

Начнем как всегда с проблемы😉
В реальных приложениях часто приходится работать с переменными, которые могут принимать значение null. Например, у нас может быть объект, который не инициализирован, и мы хотим присвоить ему значение по умолчанию, если он равен null. До появления C# 8, это приходилось делать с помощью условных операторов, например:
public void ProcessData(List<int> numbers)
{
if (numbers == null)
{
numbers = new List<int>();
}

// Далее работа со списком numbers
}
Метод ProcessData проверяет, равен ли список numbers null, и если да, инициализирует его новым объектом List<int>. Подобная запись может показаться громоздкой для такой элементарной операции.

Решение
В C# 8 появился оператор присваивания объединения с null (??=), который упрощает код и делает его более лаконичным. С помощью этого оператора можно выполнить ту же операцию в одну строчку:

public void ProcessData(List<int> numbers)
{
numbers ??= new List<int>();

// Далее работа со списком numbers
}
Оператор ??= проверяет, является ли переменная слева от оператора равной null, и если это так, присваивает ей значение справа от оператора. Если переменная не равна null, то присваивание не выполняется.

⚠️Внимание!
Левый операнд оператора ??= должен быть переменной, свойством или элементом индексатора.

Оператор ??= чем-то похож на оператор ??, и тем не менее отличается. Напомним, что оператор ?? используется для возврата значения левого операнда, если он не равен null, в противном случае возвращается значение правого операнда. Например:
var someString = null;
someString = someString ?? "default value";
Если someString не равен null, someString сохранит своё значение. Если someString равен null, someString получит значение default value.

Таким образом, оператор ??= делает подобную проверку компактнее, ведь при его использовании не придётся дважды писать someString:
var someString = null;
someString ??= "default value";

Вот такую приколюшку завезли в C#, чтобы нам с вами легче было писать читаемый и чистый код☺️

Как вам? Знали про такую фичу?

❤️ — если знали о такой фиче
👀 — если узнали о нем впервые

#полезные_материалы #эволюция_языка
2 минуты