Подтвердить что ты не робот

Что означает знак вопроса, следующий за объявлением переменной?

Во время игры в проекте с открытым исходным кодом моя попытка ToString объекта DateTime была сорвана компилятором. Когда я подпрыгнул до определения, я увидел это:

public DateTime? timestamp;

Может кто-нибудь, пожалуйста, просветит меня по тому, что это называется и почему это может быть полезно?

4b9b3361

Ответ 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