Вопрос

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

private DateTime? startdate

Что значит DateTime? иметь в виду?

Это было полезно?

Решение

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

И точно так же, как int не может быть null, так что это DateTime объект никогда не может быть null, потому что это не ссылка.

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

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

Другие советы

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

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

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

DateTime? однако может быть нулевым.

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

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);
        }
    }

ДатаВремя? синтатически эквивалентно Обнуляемый<DateTime>.

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

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

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

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

Например:-

ДатаВремя?дата = ноль;

инт?intvalue = ноль;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top