我正在攻击SQL Server数据库,该数据库通常具有可以为null的DateTime列。我正在使用LINQ to SQL将我的WinForms(VB.NET)程序连接到数据。
我扩展了一些LINQ对象并添加了几个Nullable(Of DateTime)
属性。基本上,我正在计算是否存在特定值。该值为DateTime
。如果它不存在,我想创建一个Nullable(Of DateTime)
对象(结构,无论如何),HasValue
属性设置为False
。
我做了一些研究,显然,Nullable(Of T)
上的新构造函数会创建一个HasValue
设置为True的构造函数。
两个问题:
Nullable(Of T)
结构是专门针对此类情况创建的,为什么默认行为为HasValue
= True
?Nullable(Of T)
初始化为null
的最佳方式是什么?谢谢!
答案 0 :(得分:3)
如果您正在为Nullable
构造函数提供值,那么它将具有给定值,这将导致您描述HasValue
为真的场景。
要使用HasValue
false
声明可空,您可以选择其中一种方法:
Dim x As Nullable(Of DateTime)
Dim y As DateTime?
但是,如果您正在使用构造函数并提供值,则可空结构将不具有空值,并且HasValue
将为true
:
Dim z As New Nullable(Of DateTime)(DateTime.Now)
答案 1 :(得分:2)
Dim x As New Nullable(Of DateTime)
Debug.Assert(x.HasValue = False)
正如所料,HasValue是假的。如果你有一个带有值的Nullable(T),并想要删除该值,你只需将其设置为Nothing,就好像它是一个引用类型:
x = New Date(2011, 1, 1)
x = Nothing
Debug.Assert(x.HasValue = False)