Что означает " DateTime?"значит в C#?


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

private DateTime? startdate

Что значит DateTime? в смысле?

6 61

6 ответов:

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

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

datetime-это структура, которая никогда не может быть null. От MSDN:

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

DateTime? однако, может быть null.

A ? в качестве суффикса для типа значения допускает нулевые назначения, которые были бы в противном случае невозможны.

http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

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

Это означает, что вы можете написать что-то вроде этого:

    DateTime? a = null;
    if (!a.HasValue)
    {
        a = DateTime.Now;
        if (a.HasValue)
        {
            Console.WriteLine(a.Value);
        }
    }

дата и время? - это syntatically эквивалентно Nullable.

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

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

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

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

Например:

дата и время? дата = значение null;

int? сертификата от его закодированной формы = нуль;

в коде выше, переменная дата - это объект datetime или он имеет значение null. То же самое для intvalue.