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

Что такое "DateTime?" означает в С#?

Я читаю .Net книгу, и в одном из примеров кода есть определение класса с этим полем:

private DateTime? startdate

Что означает DateTime??

4b9b3361

Ответ 1

Так как DateTime является struct, а не class, вы получаете объект DateTime, а не ссылку, когда вы объявляете поле или переменную этого типа. И так же, как int не может быть null, так может ли этот объект DateTime никогда не быть нулевым, потому что это не ссылка.

Добавление вопросительного знака превращает его в тип с нулевым значением, что означает, что либо это объект DateTime, либо он равен null.

DateTime? является синтаксическим сахаром для Nullable<DateTime>, где Nullable сам является struct.

Ответ 2

Это нулевое значение DateTime. ? после примитивного типа/структуры указывает, что это версия с нулевым значением.

DateTime - это структура, которая никогда не может быть нулевой. Из MSDN:

Тип значения DateTime представляет даты и время со значениями от 12:00 до полуночи, 1 января 0001 года Anno Domini или AD (также известный как Common Era или CE) до 11:59:59, декабрь 31, 9999 AD (CE)

DateTime? может быть пустым.

Ответ 3

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> .

Ответ 4

Это эквивалентно Nullable <DateTime> . Вы можете добавить "?" к любому примитивному типу или структуре.

Ответ 5

он в основном дает вам дополнительное состояние для примитивов. Это может быть значение, или оно может быть нулевым. Это может быть полезно в ситуациях, когда значение не нужно назначать. Поэтому вместо использования, например, datetime.min или max, вы можете присвоить ему значение null для представления значения.

Ответ 6

Как известно, DateTime - это свойство struct DateTime - это тип значения, поэтому вы получаете объект DateTime, а не ссылку, потому что DateTime не является классом, когда вы объявляете поле или переменную этого типа, вы не можете начинать с нуля Поскольку типы значений не принимают значение null. Точно так же, как int не может быть null. поэтому объект DateTime никогда не будет null, потому что это не ссылка.

Но иногда нам нужна нулевая переменная или поле типов значений, в это время мы используем знак вопроса, чтобы сделать их нулевыми, чтобы они допускали null.

Пример: -

DateTime? date = null;

Int? intvalue = null;

В приведенном выше коде переменная date является объектом DateTime или она равна null. То же самое для intvalue.