Российский Государственный Технологический Университет им. К.Э. Циолковского
Опубликован: 02.03.2007 | Доступ: свободный | Студентов: 5636 / 790 | Оценка: 3.96 / 3.45 | Длительность: 27:04:00
ISBN: 978-5-9556-0086-4
Лекция 13:

Шаблоны

Операция ??

Операция ?? определяет то значение, которое должно присваиваться переменной "основного" типа в случае, когда значением переменной 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)

Таблица истинности трехзначной логики прилагается:

x y x&y x|y
true true true true
true false false true
true null null true
false true false true
false false false false
false null false null
null true null true
null false false null
null null null null
kewezok kewezok
kewezok kewezok
Елена Шляхт
Елена Шляхт
Объясните плиз в чем отличие а++ от ++а
Почему результат разный?
int a=0, b=0;
Console.WriteLine(a++); //0
Console.WriteLine(++b); //1
a++;
++b;
Console.WriteLine(a); //2
Console.WriteLine(b); //2