Типы, допускающие значения 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;
Связанные разделы
Дополнительные сведения:
Использование допускающих значение NULL типов (Руководство по программированию на C#)
Упаковка-преобразование типов, допускающих значение NULL (Руководство по программированию на C#)
Спецификация языка C#
Дополнительные сведения см. в Спецификация языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.
См. также
Ссылки
Основные понятия
Руководство по программированию на C#