Я думаю, этот пример может вам помочь:
Обнуляемый тип может использоваться так же, как и обычный тип значения.Фактически, неявные преобразования встроены для преобразования между равной нулю и ненулевой переменной одного и того же типа.Это означает, что вы можете присвоить стандартное целое число пустому целому числу и наоборот:
int? nFirst = null;
int Second = 2; nFirst = Second; // Valid
nFirst = 123; // Valid
Second = nFirst; // Also valid
nFirst = null; // Valid
Second = nFirst; // Exception, Second is nonnullable.
Рассматривая вышеприведенные операторы, вы видите, что переменная, допускающая обнуляемое и ненулевое значение, может обмениваться значениями до тех пор, покатак как переменная Nullable не содержит ноль.Если он содержит ноль, генерируется исключение.Чтобы избежать исключения, вы можете использовать свойство HasValue для nullable:
if (nFirst.HasValue) Second = nFirst;
Как вы можете видеть, если nFirst имеет значение, присваивание произойдет;в противном случае назначение пропускается.