如何将DateTime设置为null

时间:2013-05-27 08:33:00

标签: c# entity-framework

使用C#。我有一个字符串dateTimeEnd

如果字符串格式正确,我希望生成DateTime并将其分配给类型为

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

如果dateTimeEnd为空或空,我需要将eventCustom.DateTimeEnd设置为空。

我正在尝试使用以下代码实现此目的,但eventCustom.DateTimeEnd始终为null。

你能帮我解决一下代码中的错误吗?

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


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

6 个答案:

答案 0 :(得分:96)

看起来你只是想要:

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作为输入没有问题。

答案 1 :(得分:13)

DateTime是一种不可为空的值类型

DateTime? newdate = null;

您可以使用Nullable<DateTime>

c# Nullable Datetime

答案 2 :(得分:3)

这应该有效:

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

请注意,如果字符串的格式不正确,则会抛出异常。

答案 3 :(得分:3)

这一行:

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

与:

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

因为条件运算符?的优先级高于赋值运算符=。这就是eventCustom.DateTimeEnd总是为空的原因。 (MSDN Ref

答案 4 :(得分:1)

你可以写 约会时间? newdate = null;

答案 5 :(得分:0)

现在,我无法使用DateTime?,我使用DBNull.Value表示所有数据类型。它很棒。

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