Как присвоить структуре struct значение null в C#

В языке программирования C# тип данных struct (структура) относится к типам, которые по умолчанию не могут быть равны null. Но порой возможность сравнения структуры с null бывает необходимой. Рассмотрим, как добиться использования struct в качестве null-совместимого типа.

Неудачная попытка использования struct и null

Создадим структуру Worker на C#, описывающую информацию о Сотруднике. Она содержит следующие поля:

  • Имя (name);
  • Должность (position);
  • Зарплата (salary).

Структура имеет конструктор. Для всех полей имеются геттеры и сеттеры.

Теперь напишем следующий код:

В методе Main объявляются две структуры Worker (w1 и w2). w1 присваивается null, в w2 создаётся новый экземпляр Worker. Далее обе структуры по очереди проверяются на равенство null с помощью условного оператора if.

Попробуем выполнить данный код.

Ошибка при попытке присвоить struct значение null

Выведутся следующие ошибки: “Не удается преобразовать значение NULL в “TestConcole.Program.Worker”, так как это тип, не допускающий значения NULL” и “Оператор “==” не может применяться к операндам типа “TestConcole.Program.Worker” и “<null>”.

Данные ошибки закономерны, поскольку в языке C# структура struct является типом данных, который по умолчанию не может принимать значение null. Исправим проблему.

Решение проблемы использования struct и null

В C# имеется специальная структура, которая позволяет разрешить использование значения null с теми типами, для которых это запрещено согласно спецификациям. Это структура Nullable<T> или её сокращённая запись с помощью оператора ? (знак вопроса). T – это какой-либо тип данных.

Перепишем объявления структур с помощью оператора Nullable.

Также можно применить сокращённую форму записи, используя оператор ?:

Выполним программу.

Как присвоить структуре struct значение null в C#

Теперь компиляция прошла без ошибок и программа успешно завершила работу.

Резюме

Чтобы в языке C# разрешить присвоение структуре struct значения null (а также сравнение с null и т. п.), необходимо воспользоваться оператором Nullable<T> или его сокращённым эквивалентом ?.

Как присвоить структуре struct значение null в C#
5 (100%) 1 vote

Поделиться в соц. сетях:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">