Шаблоны
Явное преобразование
Особенности явного приведения типов. Значение Nullable может быть явным образом приведено к regular type. При этом можно использовать как выражение явного приведения к типу, так и свойство Value. Например:
int? n = null; //int m1 = n; // Будет зафиксирована ошибка на этапе компиляции. int m2 = (int)n; // Compiles, but will create an exception if x is null. int m3 = n.Value; // Compiles, but will create an exception if x is null.
Возможно также объявление user-defined операций приведения между двумя типами. Это же преобразование будет применяться и для Nullable-вариантов этих типов.
Неявное преобразование
Переменной nullable -типа может быть присвоено пустое ( null ) значение:
int? n1 = null;
Значение "основного" типа допускает неявное преобразование к соответствующему nullable -типу.
int? n2; n2 = 10; // Implicit conversion.
Операции
Предопределенные одноместные и двуместные операции, а также user-defined операции (операторные функции), которые существуют для value types-могут применяться для Nullable типов. Эти операторные функции produces null value, если значение операндов null. В противном случае значения операндов используются для определения значения. Например:
int? a = 10; int? b = null; a++; // Increment by 1, now a is 11. a = a * 10; // Multiply by 10, now a is 110. a = a + b; // Add b, now a is null.
Основное правило, по которому реализуются операции сравнения значений Nullable типов, состоит в следующем. Результат сравнения двух Nullable -операндов всегда будет false, если хотя бы один из операндов имеет значение null. Например:
int? num1 = 10; int? num2 = null; if (num1 >= num2) { System.Console.WriteLine("num1 is greater than or equal to num1"); } else { // num1 НЕ МЕНЬШЕ num2 }
Заключение в части else условного оператора НЕКОРРЕКТНО, поскольку num2 является равным null, то есть пустым и поэтому не содержит никакого значения.