Эта короткая статья отвечает на вопрос «как преобразовать тип, допускающий значение 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();