Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server VB.NET-使用HasValue=False创建可为null的(Of T)_Sql Server_Vb.net_Linq To Sql_Datetime_Nullable - Fatal编程技术网

Sql server VB.NET-使用HasValue=False创建可为null的(Of T)

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)上的新构造

我正在处理一个SQL Server数据库,该数据库通常具有可以为null的DateTime列。我正在使用LINQtoSQL将我的WinForms(VB.NET)程序连接到数据

我扩展了一些LINQ对象,并添加了两个
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;-)