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

Шаблоны

Явное преобразование

Особенности явного приведения типов. Значение 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, то есть пустым и поэтому не содержит никакого значения.

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