Эта короткая статья отвечает на вопрос «как преобразовать тип, допускающий значение NULL, в тип значения в C#».

Насколько вы знаете, типу значения нельзя присвоить нулевое значение, но иногда нам нужно это сделать. Например, когда мы работаем с базой данных и получаемое нами значение может быть нулевым.

Очень просто объявить с помощью Nullable‹T›:

// Nullable declaration using question mark 
int? catId = null; 
bool? isShorthair = null; 
// Equivalent declaration using 
Nullable<T> Nullable<int> dogId; 
Nullable<bool> hasTail;

Но как преобразовать, например, Nullable‹int› в int? Поскольку все типы, допускающие значение null, имеют два свойства: Value и HasValue, мы можем сделать следующее:

int intCatId; 
if (catId.HasValue) 
    intCatId = catId.Value; 
else 
    intCatId = default(int);

Или короче:

intCatId = catId == null ? default(int) : v1; 
// We also can use null-coalescing operator (??) 
intCatId = catId ?? default(int);

Но, начиная с .NET 4.0, есть другой более удобный и читаемый способ. Мы можем использовать нулевой безопасный геттер:

intCatId = catId.GetValueOrDefaul();