.NET三元运算符和类型转换的问题

时间:2019-03-26 15:59:45

标签: vb.net ternary-operator

我有一个三元表达式,用于检查Object是否为DBNull.Value,如果Nothing返回True,如果False返回转换为该Date的{​​{1}}类型。但是,由于某些奇怪的原因,即使最Object当然是DateTime,由三元表达式设置的可为空的'1/1/0001 12:00:00 AM'变量也被神秘地设置为Object。任何人都可以重现这种行为吗?如果是这样,为什么会发生?

奇怪的是,我已将此表达式更改为常规的if和else块,而我完全没有这种行为。因此,这必须与三元声明有关。

DBNull.Value

我想使用三元语句,因为它的代码更少。

1 个答案:

答案 0 :(得分:2)

原因是VB推断If运算符的返回类型为Date,因为这是CDate返回的内容。可以将Nothing关键字转换为不可为空的Date对象,因为VB中的Nothing也意味着“默认”,而Date的默认值为1/1/0001 12:00:00 AM。要解决此问题,您必须确保至少一个参数明确地是DateTime?

例如,这将起作用:

setDate = If(testDate Is DBNull.Value, New DateTime?, CDate(testDate))