Установите пустую переменную DateTime - PullRequest
45 голосов
/ 02 апреля 2012

Я бы объявил пустую строковую переменную следующим образом:

    string myString = string.Empty;

Есть ли эквивалент для переменной 'DateTime'?

Обновление:

Проблема в том,Я использую этот DateTime в качестве параметра для StoredProcedure в SQL.Например:

    DateTime? someDate = null;
    myCommand.Parameters.AddWithValue("@SurgeryDate", someDate);

Когда я запускаю этот код, возникает исключение, сообщающее мне, что StoredProcedure ожидает параметр @SurgeryDate.Но я обеспечил это.Есть идеи почему?

Ответы [ 11 ]

74 голосов
/ 02 апреля 2012

Так как DateTime является типом значения, вы не можете присвоить ему null, но именно для этих случаев (отсутствие значения) было введено Nullable<T> - вместо этого используйте nullable DateTime:

DateTime? myTime = null;
27 голосов
/ 02 апреля 2012

Нет. У вас есть 2 варианта:

DateTime date = DateTime.MinValue;

Это работает, когда вам нужно что-то делать каждые X раз (так как у вас всегда будет больше MinValue), но на самом деле может вызвать незначительные ошибки (например, использование некоторых операторов без предварительной проверки, если вы не * 1005). *) если вы не осторожны.

И вы можете использовать Nullable:

DateTime? date = null;

Это приятно и позволяет избежать большинства проблем, вводя только 1 или 2.

Это действительно зависит от того, чего вы пытаетесь достичь.

11 голосов
/ 02 апреля 2012

Вы можете установить переменную DateTime равной 1/1/0001 00:00:00, но сама переменная не может быть нулевой. Чтобы получить этот MinTime используйте:

DateTime variableName = DateTime.MinValue;
6 голосов
/ 02 апреля 2012

Вы можете использовать обнуляемую дату и время. Datetime? someDate = null;

В таких случаях вы можете встретить людей, использующих DateTime.Max или DateTime.Min, но я очень сомневаюсь, что вы хотите это сделать. Это приводит к ошибкам с крайними случаями, коду, который труднее читать, и т. Д.

5 голосов
/ 12 октября 2016

Либо:

DateTime dt = new DateTime();

или

DateTime dt = default(DateTime);
5 голосов
/ 03 апреля 2012

Используемый вами метод (AddWithValue) не преобразует значения null в нулевые значения базы данных.Вместо этого вы должны использовать DBNull.Value:

myCommand.Parameters.AddWithValue(
    "@SurgeryDate", 
    someDate == null ? DBNull.Value : (object)someDate
);

Это передаст значение someDate, если оно не равно null, или DBNull.Value в противном случае.В этом случае правильное значение будет передано в базу данных.

4 голосов
/ 20 октября 2017

Если вы установите дату

DateTime dNewDate = new DateTime();

Значение установлено на {1/1/0001 12:00:00 AM}

3 голосов
/ 02 апреля 2012

A string представляет собой последовательность символов. Так что имеет смысл иметь пустой string, который является просто пустой последовательностью символов.

Но DateTime - это всего лишь одно значение, поэтому говорить о «пустом» DateTime.

не имеет смысла.

Если вы хотите представить концепцию «без значения», это обозначается как null в .Net. И если вы хотите использовать это с типами значений, вам нужно явно сделать их обнуляемыми. Это означает либо использование Nullable<DateTime>, либо эквивалент DateTime?.

DateTime (как и все типы значений) также имеет значение по умолчанию , которое присваивается неинициализированным полям, и вы также можете получить его по new DateTime() или default(DateTime). Но вы, вероятно, не хотите его использовать, поскольку он представляет собой действительную дату: 1.1.0001 0: 00: 00.

3 голосов
/ 02 апреля 2012

Вариант 1: использовать обнуляемый DateTime?

Вариант 2: Использовать DateTime.MinValue

Лично я бы предпочел вариант 1.

1 голос
/ 02 апреля 2012

Сама по себе пустая дата не существует, вы имеете в виду что-то вроде:

DateTime? myDateTime = null;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...