Обнуляемый объект может использоваться в тех выражениях, которые являются действительными для его базового типа. Более того, обнуляемые объекты могут сочетаться с необнуляемыми объектами в одном выражении. И это вполне допустимо благодаря предопределенному преобразованию базового типа в обнуляемый. Когда обнуляемые и необнуляемые типы сочетаются в одной операции, ее результатом становится значение обнуляемого типа.
В приведенной ниже программе демонстрируется применение обнуляемых типов в выражениях.
// Использовать обнуляемые объекты в выражениях.
using System;
class NullableDemo { static void Main {
int? count = null; int? result = null;
int incr = 10; // переменная incr не является обнуляемой
// переменная result содержит пустое значение,
// переменная оказывается count пустой, result = count + incr; if(result.HasValue)
Console.WriteLine("Переменная result имеет следующее значение: " + result.Value);
else
Console.WriteLine("У переменной result отсутствует значение");
// Теперь переменная count получает свое‘значение, и поэтому
// переменная result будет содержать конкретное значение.
count = 100;
result = count + incr;
if(result.HasValue)
Console.WriteLine("Переменная result имеет следующее значение: " + result.Value);
else
Console.WriteLine("У переменной result отсутствует значение");
}
}
При выполнении этой программы получается следующий результат.
У переменной result отсутствует значение Переменная result имеет следующее значение: 110
Оператор ??
Попытка преобразовать обнуляемый объект в его базовый тип путем приведения типов обычно приводит к генерированию исключенияSystem. InvalidOperationException,если обнуляемый объект содержит пустое значение. Это может произойти, например, в том случае, если значение обнуляемого объекта присваивается переменной его базового типа с помощью приведения типов. Появления данного исключения можно избежать, если воспользоваться оператором ? ?, называемым
Ниже приведена общая форма оператора ??.
Если