Типы, допускающие значения NULL (руководство по программированию на C#)

Обновлен: Ноябрь 2007

Тип, допускающие значения NULL, являются экземплярами структуры System.Nullable<T>. Тип, допускающий значения NULL, может представлять правильный диапазон значений для своего базового типа значений и дополнительное пустое значение null. Например, для Nullable<Int32>, называемого "тип Int32, допускающий значения NULL", можно назначить любое значение от -2 147 483 648 до 2 147 483 647 или значение null. Для Nullable<bool> можно назначить значения truefalse или null. Возможность назначения значения null для числовых и логических типов особенно полезна при работе с базами данных и другими типами данных, содержащих элементы, которым может быть не назначено значение. Например, логическое поле в базе данных может хранить значения true или false или может быть не задано.

class NullableExample
{
    static void Main()
    {
        int? num = null;
        if (num.HasValue == true)
        {
            System.Console.WriteLine("num = " + num.Value);
        }
        else
        {
            System.Console.WriteLine("num = Null");
        }

        // y is set to zero
        int y = num.GetValueOrDefault();

        // num.Value throws an InvalidOperationException if num.HasValue is false
        try
        {
            y = num.Value;
        }
        catch (System.InvalidOperationException e)
        {
            System.Console.WriteLine(e.Message);
        }
    }
}

Выходные данные показаны в примере:

num = Null

Nullable object must have a value.

Общие сведения о типах, допускающих значения NULL

Типы, допускающие значения NULL, имеют следующие характеристики.

  • Типы, допускающие значения NULL, представляют переменные типа значения, которым можно назначать значение null. Нельзя создать тип, допускающий значения NULL, на основе ссылочного типа. (Ссылочные типы уже поддерживают значение null.)

  • Синтаксис T? является краткой формой для Nullable<T>, где T — это тип значения. Две эти формы взаимозаменяемы.

  • Назначение значения для типа, допускающего значения NULL, выполняется так же, как и для обычного типа значения, например, int? x = 10; или double? d = 4.108;

  • Используйте метод Nullable<T>.GetValueOrDefault для возврата назначенного значения или значения по умолчанию для базового типа, если значением является null, например int j = x.GetValueOrDefault();

  • Используйте свойства HasValue и Value, доступные только для чтения, для выполнения проверки на наличие значения null и извлечения этого значения, например if(x.HasValue) j = x.Value;

    • Свойство HasValue возвращает значение true, если переменная содержит значение, или значение false, если она пуста.

    • Свойство Value возвращает значение, если оно назначено. В противном случае создается исключение System.InvalidOperationException.

    • Значение по умолчанию для переменной типа, допускающего значения NULL, задает для HasValue значение false. Свойство Value не определено.

  • Используйте оператор ??, чтобы назначить значение по умолчанию, применяемое, когда тип, допускающий значения NULL, с текущим значением null, назначен типу, не допускающему значения NULL, например, int? x = null; int y = x ?? -1;

  • Вложенные типы, допускающие значения NULL, использовать нельзя. Компиляция следующей строки невозможна: Nullable<Nullable<int>> n;

Связанные разделы

Дополнительные сведения см. в следующих разделах.

Спецификация языка C#

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

  • 4.1.10 Типы, допускающие значения NULL

См. также

Задачи

Пример типов, допускающих значения NULL

Основные понятия

Руководство по программированию в C#

Ссылки

Nullable

Другие ресурсы

Visual C#

Справочник по C#

Что именно означает "ликвидирован"?