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

Как установить DateTime в null

Использование С#. У меня есть строка dateTimeEnd.

Если строка находится в правильном формате, я хочу сгенерировать DateTime и назначить ее eventCustom.DateTimeEnd типа

public Nullable<System.DateTime> DateTimeEnd { get; set; }

Если dateTimeEnd пусто или пусто, мне нужно eventCustom.DateTimeEnd установить значение null.

Я пытаюсь достичь этого, используя следующий код, но всегда получаю null для eventCustom.DateTimeEnd.

Не могли бы вы помочь мне определить, что не так в моем коде?

   DateTime? dateTimeEndResult;
     if (!string.IsNullOrWhiteSpace(dateTimeEnd))
        dateTimeEndResult = DateTime.Parse(dateTimeEnd);


eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
4b9b3361

Ответ 1

Похоже, вы просто хотите:

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
    ? (DateTime?) null
    : DateTime.Parse(dateTimeEnd);

Обратите внимание, что это вызовет исключение, если dateTimeEnd не является допустимой датой.

Альтернативой может быть:

DateTime validValue;
eventCustom.DateTimeEnd = DateTime.TryParse(dateTimeEnd, out validValue)
    ? validValue
    : (DateTime?) null;

Теперь будет установлен результат null, если dateTimeEnd недействителен. Обратите внимание, что TryParse обрабатывает null как вход без проблем.

Ответ 2

DateTime - тип значения, не подлежащего обнулению.

DateTime? newdate = null;

Вы можете использовать Nullable<DateTime>

С# Nullable Datetime

Ответ 3

Это должно работать:

if (!string.IsNullOrWhiteSpace(dateTimeEnd))
    eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd);
else
    eventCustom.DateTimeEnd = null;

Обратите внимание, что это вызовет исключение, если строка не в правильном формате.

Ответ 4

Вы можете написать DateTime? newdate = null;

Ответ 5

Эта строка:

eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;

совпадает с:

eventCustom.DateTimeEnd = dateTimeEndResult = (true ? (DateTime?)null : dateTimeEndResult);

поскольку условный оператор ? имеет более высокий приоритет, чем оператор присваивания =. Вот почему вы всегда получаете значение null для eventCustom.DateTimeEnd. (MSDN Ref)

Ответ 6

Теперь я не могу использовать DateTime?, я использую DBNull.Value для всех типов данных. Он отлично работает.

eventCustom.DateTimeEnd = string.IsNullOrWhiteSpace(dateTimeEnd)
  ? DBNull.Value
  : DateTime.Parse(dateTimeEnd);