如何在VB.NET中将可为空的DateTime设置为null?

我正在尝试在我的用户界面上设置一个日期范围过滤器,其复选框用于说明是否应使用DateTimePicker的值,例如
Dim fromDate As DateTime? = If(fromDatePicker.Checked,fromDatePicker.Value,Nothing)

然而,将fromDate设置为Nothing不会导致它被设置为Nothing,而是设置为’12:00:00 AM’,并且以下If语句错误地执行过滤器,因为startDate不是Nothing.

If (Not startDate Is Nothing) Then
    list = list.Where(Function(i) i.InvDate.Value >= startDate.Value)
End If

我如何确保startDate获得Nothing值?

问题是它首先检查这个赋值的右侧,并确定它是DateTime(没有?)类型.然后执行分配.

这将有效:

Dim fromDate As DateTime? = If(fromDatePicker.Checked,_
                               fromDatePicker.Value,_
                               CType(Nothing,DateTime?))

因为它强制右侧的类型是DateTime?.

正如我在评论中所说,Nothing可能更类似于C#的默认值(T)而不是null:

Nothing represents the default value of a data type. The default value depends on whether the variable is of a value type or of a reference type.

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强制返回为文本 --------------------------...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办法, Format 或者FormatDateTime 竟然结果和...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace My ‘全局错误处理,新的解决方案直接...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用的爽呀,这篇文章写与2011年,看来我以前没...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, t...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integ...