TOC

This article has been localized into Russian by the community.

Введение:

Обнуляемый тип

NULL означает буквально вакантное, пустое, недействительное, - переменную, которая еще не имеет определенного значения. К этому моменту обучения вы уже могли иметь дело с переменными, которым при создании не были присвоены значения, намеренно или нет. Если да, то вы уже знаете, что вы всегда должны быть уверены, что переменная имеет значение перед тем, как вы собираетесь получить к нему доступ. Если нет, то вы, вероятно, встретитесь с NullReferenceException.

NULLы особенно уместны при работе с собственными объектами и строками. С другой стороны, имея дело с числами, например, целыми, вы увидите, что они всегда имеют значение (по умолчанию). Для целого числа таким подразумеваемым / резервным значением является 0 (ноль), которое никогда не следует путать с NULL - они совсем не одно и то же, даже если некоторые нестатически типизированные языки программирования могут интерпретировать их одинаково. 0 - это число, NULL - ничего .

Таким образом, если вы когда-нибудь обнаружите, что хотите иметь число, представляющее неопределенное/нулевое значение, вы можете застрять, потому что вы не можете присвоить null целочисленной переменной. Если, конечно, это целое число не определено как nullable-специальная языковая конструкция, созданная для подобных ситуаций. Значение NULL переменной определяется, вопросительным постфиксным типом. Вот пример, иллюстрирующий разницу:

int notNullable = null; // Will cause an error from the compiler

int? nullable = null; // Just fine - it's nullable!

Это справедливо для всех так называемых типами значений, такие как целые числа, floats, bools и structs. С другой стороны, строки и объекты являются ссылочными типами и не могут быть объявлены как допускающие обнуляемое значение, поскольку по умолчанию они по умолчанию нулевые.

Проверка обнуляемого значения на ноль

Итак, теперь, когда вы определили переменную, которая может быть null, проверяется, является ли это случай действительно важным. Вы можете сделать это двумя способами: просто сравните переменную с нулевым ключевым значением, как и для любых других типов, или используйте свойство HasValue, которое объект, допускающий значение NULL, наследует от System.Nullable struct. Вот пример:

int? nullable = null;  
if (nullable == null)  
    Console.WriteLine("It's a null!");  
if (!nullable.HasValue)  
    Console.WriteLine("It's a null!");

Результат тот же, поэтому используйте любой метод, который вы найдете наиболее читаемым и легким для понимания. Поскольку наше значение теперь может быть null, вы должны всегда проверять перед его использованием - в противном случае вы можете столкнуться с исключением.

Использование нулевого значения

От System.Nullable a обнуляемые объекты наследуют также свойство Значение. Оно может использоваться для получения реального значения обнуляемого объекта. Однако для простых операций сравнения, например, используя операторы == и the !=, However, for simple comparison operations, e.g. using the == and the != operators, C# позволяет опустить свойство Значение и просто сравнить объект, допускающий значение NULL. Другими словами, оба этих примера выполняют одну и ту же задачу:

int? nullable = 42;

if (nullable.Value == 42)  
    Console.WriteLine("It's 42!");  

if (nullable == 42)  
    Console.WriteLine("It's 42!");

Объекты, допускающие значение NULL, всегда берутся из базового типа данных, например целого числа, как в предыдущих примерах. Хотя эти типы данных могут иметь значение по умолчанию, значение по умолчанию nullable всегда равно null. Поэтому перед использованием значения необходимо проверить наличие ссылок null, как описано выше. Однако Тип, допускающий значение NULL, наследует очень хороший вспомогательный метод, который можно использовать: GetValueOrDefault (). Он возвращает значение объекта, допускающего значение NULL, если это значение NULL, в этом случае он будет возвращать значение по умолчанию базового типа. Так, для нулевых целое число, она возвращает 0, для логическое значение NULL, что будет возвращать false и так далее. Это позволяет обрабатывать как проверку, так и извлечение значения в одной инструкции:

if ((nullable.HasValue) && (nullable.Value == 42))
    Console.WriteLine("It's 42!");

if(nullable.GetValueOrDefault() == 42)
    Console.WriteLine("It's 42!");

Как вы можете видеть, последний пример короче и легче читать, выполняя то же самое.

Резюме

Типы значений в C#, такие как целые числа и логические значения, всегда имеют значение по умолчанию. Если вы хотите обойти эту проблему, например, потому что нужно различать между 0 и NULL, или потому, что вы должны знать, выбрал ли пользователь намеренно "false" для чего-то, или если переменная имеет только значение по умолчанию false, затем можно присвоить переменной значение NULL постфиксным типом с ? (вопросительный знак).


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!