C # имеет концепцию ссылочных типов (классов) и значений типов (структур и встроенных типов, таких как int
, bool
, DateTime
и т. Д..).
Типы ссылок могут иметь значение null
, указывающее, что они не были назначены (или имеют значение "нет").
Типы значений изначально не имелипонятие обнуляемой стоимости.В некоторых контекстах они имеют значение по умолчанию (например, поле int
в классе имеет значение по умолчанию 0).Но у них нет понятия «нет».
Введите Nullable<T>
.
Nullable<T>
(или его сокращенное обозначение T?
) указывает тип значения, которыйможет иметь или не иметь значение.
например,
int? foo = null; // No initial value
foo = 9; // Now it has a value
foo = null; // No value again
И существуют методы для запроса, существует ли значение, и извлечения его:
if (foo.HasValue)
{
int actualValue = foo.Value;
}
Одна областьгде это полезно при написании кода для подключения к базам данных.Числовые (целочисленные) столбцы во многих базах данных можно настроить на обнуляемость.Без обнуляемых типов в самом C # вам нужно было бы перепрыгивать через обручи для обработки нулевого значения БД в коде (например, используя специальное значение Sentinel для представления нулевого значения БД).Обнуляемые типы заставляют это работать более плавно.