Первая мысль, которая, вероятно, приходит в голову, когда думаешь о проверке NULL, - это стандартное сравнение, такое как if (foo == null) { ... }, но есть и другие варианты; лучшие варианты.

Начиная с C # 7.0, мы можем использовать ключевое слово is. Это также позволяет нам проверять тип, поэтому мы можем написать if (foo is null) { ... }, но мы также можем написать что-то вроде:

if (foo is Animal) { ... }
// As opposed to
if (foo.GetType() == typeof(Animal)) { ... }

Начиная с C # 9.0, мы можем комбинировать is с not, чтобы получить выражение, подобное if (foo is not null) { ... }, вместо того, чтобы заключать его в проверку отрицания.

Другой способ написания is not - использовать такие открывающиеся фигурные скобки:

if (foo is { }) { ... }

Сначала это может показаться запутанным, но это часть некоторого нового сопоставления шаблонов свойств в C # 8.0, которое позволяет нам делать немного больше, чем просто проверять допустимость значений NULL. В следующем примере показано, как мы можем использовать этот шаблон для сопоставления свойств объекта и использования их в качестве локальных переменных.

Как видите, этот шаблон позволяет делать три вещи в приведенных выше примерах:

  1. Убедитесь, что переменная не равна нулю
  2. Если не null, присвоить локальной переменной
  3. Проверьте свойства в переменной и назначьте эти локальным переменным

Это более короткий удобный способ написания проверок допустимости значений NULL с использованием немного другого синтаксиса. Вы можете увидеть полный рабочий пример здесь.

Подробнее о Pattern Matching от Microsoft здесь.

Полный пример