VB.NET - Nullable DateTime and Ternary Operator

陌路散爱 提交于 2019-11-28 10:11:43
Bob Mc

I will admit that I'm not an expert on this, but apparently it stems from two things:

  1. The If ternary operator can return only one type, in this case a date type, not a nullable date type
  2. The VB.Net Nothing value is not actually null but is equivalent to the default value of the specified type, in this case a date, not a nullable date. Hence the date minimum value.

I derived most of the information for this answer from this SO post: Ternary operator VB vs C#: why resolves to integer and not integer?

Hope this helps and that someone like Joel Coehoorn can shed more light on the subject.

Bob Mc is correct. Pay extra attention to his second point - this isn't the case in C#.

What you need to do is force Nothing to a nullable DateTime by casting it as follows:

gauge.LastCalibrationDate = If(String.IsNullOrEmpty(LastCalibrationDateTextBox.Text), CType(Nothing, DateTime?), DateTime.Parse(LastCalibrationDateTextBox.Text))

Here is a snippet to demonstrate:

Dim myDate As DateTime?
' try with the empty string, then try with DateTime.Now.ToString '
Dim input = ""
myDate = If(String.IsNullOrEmpty(input), CType(Nothing, DateTime?), DateTime.Parse(input))
Console.WriteLine(myDate)

Instead of casting you can also declare a new nullable: New Nullable(Of DateTime) or New DateTime?(). The latter format looks a little odd but it's valid.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!