Поделиться через


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

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

class NullableExample
{
    static void Main()
    {
        int? num = null;

        // Is the HasValue property true? 
        if (num.HasValue)
        {
            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 типов (Руководство по программированию на C#)

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

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

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

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

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

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

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

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

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

    • По умолчанию для свойства HasValue используется значение false. Свойство Value не имеет значения по умолчанию.

    • С типом, допускающим значение null, можно также использовать операторы == и !=, как показано в следующем примере: if (x != null) y = x;

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

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

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

Дополнительные сведения:

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

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

См. также

Ссылки

Nullable

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

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

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

Visual C#

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

Делает точного поднятая" средний "?