Я читаю .Net книгу, и в одном из примеров кода есть определение класса с этим полем:
private DateTime? startdate
Что означает DateTime?
?
Я читаю .Net книгу, и в одном из примеров кода есть определение класса с этим полем:
private DateTime? startdate
Что означает DateTime?
?
Так как DateTime
является struct
, а не class
, вы получаете объект DateTime
, а не ссылку, когда вы объявляете поле или переменную этого типа. И так же, как int
не может быть null
, так может ли этот объект DateTime
никогда не быть нулевым, потому что это не ссылка.
Добавление вопросительного знака превращает его в тип с нулевым значением, что означает, что либо это объект DateTime
, либо он равен null
.
DateTime?
является синтаксическим сахаром для Nullable<DateTime>
, где Nullable
сам является struct
.
Это нулевое значение DateTime. ?
после примитивного типа/структуры указывает, что это версия с нулевым значением.
DateTime - это структура, которая никогда не может быть нулевой. Из MSDN:
Тип значения DateTime представляет даты и время со значениями от 12:00 до полуночи, 1 января 0001 года Anno Domini или AD (также известный как Common Era или CE) до 11:59:59, декабрь 31, 9999 AD (CE)
DateTime?
может быть пустым.
A ? как суффикс для типа значения допускает ненулевые присваивания, которые были бы в противном случае невозможны.
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx
Представляет объект, type - тип значения, который также может быть назначена нулевая ссылка.
Это означает, что вы можете написать что-то вроде этого:
DateTime? a = null;
if (!a.HasValue)
{
a = DateTime.Now;
if (a.HasValue)
{
Console.WriteLine(a.Value);
}
}
DateTime? является синтаксически эквивалентным Nullable <DateTime> .
Это эквивалентно Nullable <DateTime> . Вы можете добавить "?" к любому примитивному типу или структуре.
он в основном дает вам дополнительное состояние для примитивов. Это может быть значение, или оно может быть нулевым. Это может быть полезно в ситуациях, когда значение не нужно назначать. Поэтому вместо использования, например, datetime.min или max, вы можете присвоить ему значение null для представления значения.
Как известно, DateTime - это свойство struct DateTime - это тип значения, поэтому вы получаете объект DateTime, а не ссылку, потому что DateTime не является классом, когда вы объявляете поле или переменную этого типа, вы не можете начинать с нуля Поскольку типы значений не принимают значение null. Точно так же, как int не может быть null. поэтому объект DateTime никогда не будет null, потому что это не ссылка.
Но иногда нам нужна нулевая переменная или поле типов значений, в это время мы используем знак вопроса, чтобы сделать их нулевыми, чтобы они допускали null.
Пример: -
DateTime? date = null;
Int? intvalue = null;
В приведенном выше коде переменная date является объектом DateTime или она равна null. То же самое для intvalue.