VB.NET - Nullable DateTime and Ternary Operator
我在vb.net中遇到了一个可以为空的日期时间问题(与2010年相比)。
方法1
1 2 3 4 5 | If String.IsNullOrEmpty(LastCalibrationDateTextBox.Text) Then gauge.LastCalibrationDate = Nothing Else gauge.LastCalibrationDate = DateTime.Parse(LastCalibrationDateTextBox.Text) End If |
方法2
1 | gauge.LastCalibrationDate = If(String.IsNullOrEmpty(LastCalibrationDateTextBox.Text), Nothing, DateTime.Parse(LastCalibrationDateTextBox.Text)) |
当给定空字符串时,方法1为gauge.lastCalibrationDate分配一个空(无)值,但方法2为其分配datetime.minValue。
在我的代码中的其他地方,我有:
1 | LastCalibrationDate = If(IsDBNull(dr("LastCalibrationDate")), Nothing, dr("LastCalibrationDate")) |
这会正确地将三元运算符中的空(无)赋值给可为空的日期时间。
我错过了什么?谢谢!
鲍勃·麦克是对的。注意他的第二点-这不是C的情况。
您需要做的是强制
1 | gauge.LastCalibrationDate = If(String.IsNullOrEmpty(LastCalibrationDateTextBox.Text), CType(Nothing, DateTime?), DateTime.Parse(LastCalibrationDateTextBox.Text)) |
下面是一段演示:
1 2 3 4 5 | 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) |
您也可以声明一个新的可以为空的:
我承认我不是这方面的专家,但很明显,这有两个原因:
我从下面得到了这个答案的大部分信息:三元运算符vb vs c:为什么解析为整数而不是整数?
希望这能有所帮助,像乔尔·科霍恩这样的人能对这个问题有更多的了解。