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

Если объект DateTime не может быть нулевым, то чем он назначен?

Если экземпляр DateTime еще не назначен, что это значение?

Чтобы посмотреть конкретный пример: В приведенном ниже классе было бы "UnassignedDateTime == null" возвращать true?

И если это так, то, конечно, массово нелогично, что такая ссылка может быть нулевой, но не назначенной null?

class TestClass
{
    public DateTime AssignedDateTime {get; set;}
    public DateTime UnassignedDateTime {get; set;}

    public TestClass()
    {
        AssignedDateTime=DateTime.Now;
        //Not assigning other property
    }

}


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

4b9b3361

Ответ 1

Это будет default(DateTime), которое конструктивным решением оказывается DateTime.MinValue

default(T) - это то, какие типы инициализируются при использовании в качестве полей или элементов массива.
default(int) == 0, default(bool) == false и т.д.
По умолчанию для всех типов ссылок, конечно, null.

Законно писать int i = default(int);, но это немного глупо. Однако в общем методе T x = default(T); может быть очень полезным.

Конечно, это нелогично, что такая ссылка может быть нулевой, но не назначена null?

DateTime - это тип значения, (struct DateTime { ... }), поэтому он не может быть null. Сравнение с нулем всегда будет возвращать false.

Итак, если вы хотите узнать присвоенный статус, вы можете сравнить его с default(DateTime), который, вероятно, не является допустимой датой в вашем домене. В противном случае вам придется использовать тип с нулевым значением DateTime?.

Ответ 3

Вероятно, это значение будет DateTime.MinValue (значение этой константы равно 00: 00: 00.0000000, 1 января 0001 г.)

Ответ 4

A DateTime будет на нем минимальное значение, если оно инициализируется, но не устанавливается. например 12:00:00 midnight, January 1, 0001

Ответ 5

Другая возможность - MinValue, которая, как мне кажется, изначально такая. Поскольку он хранится как целое число внутри, это имело бы смысл.

Ответ 6

Не могу проверить прямо сейчас, но я думаю, что он по умолчанию: 01/01/0001 00:00:00.

Если вы отлаживали свой код и зависали над свойством, он должен сказать вам.

Ответ 7

Поскольку DateTime является структурой, она не может иметь значение null (DateTime?), Условие UnassignedDateTime == null всегда ложно.