如何将DateTime设置为null

70
使用C#编程。我有一个字符串dateTimeEnd
如果该字符串的格式正确,我希望生成DateTime并将其分配给类型为eventCustom.DateTimeEnd的变量。
public Nullable<System.DateTime> DateTimeEnd { get; set; }

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

我尝试使用以下代码实现,但是我始终得到 eventCustom.DateTimeEnd 的 null 值。

请帮我找出代码中的问题所在,谢谢!

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


eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;
7个回答

167

看起来你只想要:

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

请注意,如果dateTimeEnd不是有效的日期,这将会抛出一个异常。

另一种选择是:

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

如果dateTimeEnd无效,则现在将结果设置为null。请注意,TryParse可以处理null作为输入而没有问题。


1
这不应该反过来吗?我的意思是,当字符串包含“IsNullOrWhiteSpace”时,应该将null值分配给字段,因此(DateTime?) null应该在条件运算符之后。 - sohaiby
@sohaiby:是的,发现了。我会修复它。 - Jon Skeet
更倾向于使用default(DateTime?)吗? - Gert Arnold
@GertArnold:它们是等价的 - 你使用哪个都无所谓。 - Jon Skeet

21

DateTime 是一个不可为 null 的值类型。

DateTime? newdate = null;

您可以使用Nullable<DateTime>

C#可空日期时间


3
这应该可以正常工作:
if (!string.IsNullOrWhiteSpace(dateTimeEnd))
    eventCustom.DateTimeEnd = DateTime.Parse(dateTimeEnd);
else
    eventCustom.DateTimeEnd = null;

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

1
dateTimeEndResult 怎么可能是 true 呢?它是一个 DateTime?,而不是一个 bool - Jon Skeet
尝试这个时,我得到了错误2:运算符“==”不能应用于类型为“System.DateTime?”和“bool”的操作数。 - GibboK
@JonSkeet 我在测试时输入了错误的类型。我现在已经更正了。 - Matthew Watson

3
这行代码:
eventCustom.DateTimeEnd = dateTimeEndResult = true ? (DateTime?)null : dateTimeEndResult;

等同于:

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

因为条件运算符 ? 的优先级高于赋值运算符 =,所以你总是会得到 eventCustom.DateTimeEnd 的 null 值。(MSDN Ref

2

您可以编写 DateTime? newdate = null;。


0

这很简单

//declare date object
maxDate: Date;
//assign value

this.maxDate=new Date(event.value._d); //event.value._d is date formate
//setting date Object to null
this.maxDate=null;

1
你确定这是有效的C#代码吗? - Rafaelplayerxd YT

-1

现在,我不能使用 DateTime?,我正在使用 DBNull.Value 代替所有数据类型。它运行得非常好。

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

DbNull.Value绝对不同于null,并且它的使用非常有限。 - Gert Arnold

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接