Sql server VB.NET-使用HasValue=False创建可为null的(Of T)
我正在处理一个SQL Server数据库,该数据库通常具有可以为null的DateTime列。我正在使用LINQtoSQL将我的WinForms(VB.NET)程序连接到数据 我扩展了一些LINQ对象,并添加了两个Sql server VB.NET-使用HasValue=False创建可为null的(Of T),sql-server,vb.net,linq-to-sql,datetime,nullable,Sql Server,Vb.net,Linq To Sql,Datetime,Nullable,我正在处理一个SQL Server数据库,该数据库通常具有可以为null的DateTime列。我正在使用LINQtoSQL将我的WinForms(VB.NET)程序连接到数据 我扩展了一些LINQ对象,并添加了两个null(日期时间的)属性。基本上,我是在计算某个特定值是否存在。该值是一个DateTime。如果它不存在,我想创建一个Nullable(Of DateTime)对象(结构,无论什么),其HasValue属性设置为False 我做了一些研究,显然,Nullable(Of T)上的新构造
null(日期时间的)
属性。基本上,我是在计算某个特定值是否存在。该值是一个DateTime
。如果它不存在,我想创建一个Nullable(Of DateTime)
对象(结构,无论什么),其HasValue
属性设置为False
我做了一些研究,显然,Nullable(Of T)
上的新构造函数创建了一个HasValue
设置为True的构造函数
两个问题:
Nullable(Of T)
结构是专门为这种情况创建的,为什么默认行为是HasValue
=True
?null(Of T)
初始化为null
的最佳方法是什么谢谢 如果您向
Nullable
构造函数提供一个值,那么它将具有给定的值,这将导致您描述的场景中HasValue
为true
要使用HasValue
的false
声明可为null的值,可以采用以下方法之一:
Dim x As Nullable(Of DateTime)
Dim y As DateTime?
但是,如果使用构造函数并提供值,则可为null的结构将不会有null值,并且它的HasValue
将为true
:
Dim z As New Nullable(Of DateTime)(DateTime.Now)
艾哈迈德的回答是好的。还有一个空构造函数,尽管奇怪的是,MSDN上没有它的踪迹:
Dim x As New Nullable(Of DateTime)
Debug.Assert(x.HasValue = False)
正如所料,HasValue为false。如果您有一个值为null的(T),并且希望删除该值,则只需将其设置为Nothing,就像它是引用类型一样:
x = New Date(2011, 1, 1)
x = Nothing
Debug.Assert(x.HasValue = False)
你确定这是正确的吗?我几乎可以肯定的是,我试图使用
Dim x作为新的可空(日期时间)
,并返回一个HasValue=True
和Value='1/1/0001 00:00'
的对象。我弄错了吗?我之所以把这些Debug.Assert放在示例代码中,是有原因的,我运行了这段代码,这些Assert保证HasValue确实为false;-)