Шаблоны
Операция ??
Операция ?? определяет то значение, которое должно присваиваться переменной "основного" типа в случае, когда значением переменной nullable типа является null:
int? c = null; // d = c, если только c не равно null. В этом случае d = -1. int d = c ?? -1;
Эта операция позволяет строить сложные выражения. Например:
int? e = null; int? f = null; // g = e или f, если только e и f одновременно не равны null. // В этом случае g = -1. int g = e ?? f ?? -1;
Тип bool?
Область значений bool? Nullable -типа состоит из трех значений: true, false, null.
Поэтому значения данного типа неприменимы в операторах управления выполнением кода — условных операторах цикла — if, for, while. Попытка применения этого типа в вышеперечисленных операторах пресекается уже на стадии компиляции с кодом Compiler Error CS0266:
bool? b = null; if (b) // Error CS0266. { }
Ну не сделали под этот тип новых операторов, а для старых непонятно, каким же образом интерпретировать значение null в контексте условия.
Nullable Booleans могут быть явно преобразованы к типу bool, однако, если операнд все же окажется пустым ( null ), возбуждение InvalidOperationException неизбежно. Поэтому непосредственно перед применением преобразования следует прибегать к помощи HasValue -свойства.
Для Nullable -типа, основанного на типе bool, определены операторные функции
bool? operator &(bool? x, bool? y) bool? operator |(bool? x, bool? y)