Типы, допускающие значения NULL (Руководство по программированию на C#)
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
Типы, допускающие значения 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#.