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