ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode


Как присвоить структуре 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> или его сокращённым эквивалентом ?.

5/5 - (2 голоса)



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

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

Ваш адрес email не будет опубликован.