Поскольку для получения значения NULL тип должен допускать значение NULL. Это отлично работает для ссылочных типов (любого определяемого вами класса и стандартной библиотеки), и если вы посмотрите, вы увидите, что люди действительно используют null всякий раз, когда у них есть ссылочный объект без значения.
Employee employee = Employees.Find("John Smith");
if(employee == null) throw new Exception("Employee not found");
Проблема возникает, когда вы используете такие типы value, как int, char или float. В отличие от ссылочных типов, которые указывают на блок данных где-то еще в памяти, эти значения хранятся и обрабатываются встроенно (нет указателя / ссылки).
Из-за этого по умолчанию типы значений не имеют нулевого значения. В предоставленном вами коде невозможно для parentID иметь значение null (я действительно удивлен, что это даже получено вашим компилятором - Visual Studio 2008 и, вероятно, 2005 г. нарисуют зеленую линию подчеркивания и сообщат вам, что утверждение всегда ложно).
Чтобы int имел нулевое значение, вам необходимо объявить его как допускающее значение NULL
int? parentID;
Теперь parentID может содержать нулевое значение, потому что теперь это указатель (ссылка на скважину) на 32-битное целое число, а не только на 32-битное целое число.
Надеюсь, вы понимаете, почему магические значения часто используются для представления null с базовыми типами (типами значений). Сохранение этих типов значений в качестве ссылки на значение, чтобы позволить им быть нулевыми, просто вызывает много проблем и часто приводит к значительному снижению производительности (узнайте, что такое упаковка / распаковка).
Изменить: для получения дополнительной информации о боксе / распаковке (что вам нужно, чтобы иметь int == null), см. Статью по адресу MSDN:
Упаковка и распаковка (Руководство по программированию на C #)
Представление
Что касается простых назначений, упаковка и распаковка - это дорогостоящие вычислительные процессы. Когда тип значения помещен в рамку, новый объект должен быть выделен и построен. В меньшей степени приведение, необходимое для распаковки, также требует больших вычислительных затрат. Для получения дополнительной информации см. «Производительность».
person
David
schedule
26.02.2009