Что означает знак вопроса, следующий за объявлением переменной?
Во время игры в проекте с открытым исходным кодом моя попытка ToString объекта DateTime была сорвана компилятором. Когда я подпрыгнул до определения, я увидел это:
public DateTime? timestamp;
Может кто-нибудь, пожалуйста, просветит меня по тому, что это называется и почему это может быть полезно?
Ответы
Ответ 1
Это тип с нулевым значением. Неверные типы позволяют типы значений (например, int
и структуры типа DateTime) содержать нуль.
?
- синтаксический сахар для Nullable<DateTime>
, так как он используется так часто.
Чтобы вызвать ToString()
:
if (timstamp.HasValue) { // i.e. is not null
return timestamp.Value.ToString();
}
else {
return "<unknown>"; // Or do whatever else that makes sense in your context
}
Ответ 2
?
создает тип значения (int
, bool
, DateTime
или любой другой struct
или enum
) с нулевым значением через тип System.Nullable<T>
. DateTime?
означает, что переменная равна System.Nullable<DateTime>
. Вы можете присвоить этой переменной DateTime
или значение null
. Чтобы проверить, имеет ли переменная значение, используйте свойство HasValue
и чтобы получить фактическое значение, используйте свойство Value
.
Ответ 3
Это ярлык для Nullable<DateTime>
. Типы значений, такие как DateTime
, не могут быть нулевыми; Nullable<>
обертывает тип значения таким образом, что у вас есть объект с свойством HasValue
и другими удобными функциями.
Ответ 4
это значение с нулевым значением datetime