2011-11-14 76 views
3

我正在針對定期具有可以爲null的DateTime列的SQL Server數據庫。我使用LINQ to SQL將我的WinForms(VB.NET)程序連接到數據。VB.NET - 使用HasValue = False創建Nullable(Of T)

我已經擴展了一些LINQ對象並添加了幾個Nullable(Of DateTime)屬性。基本上,我正在計算一個特定的值是否存在。值爲DateTime。如果它不存在,我想創建一個Nullable(Of DateTime)對象(結構,不管),HasValue屬性設置爲False

我做了一些研究,很明顯,Nullable(Of T)上的新構造函數創建了一個設置爲True的HasValue

兩個問題:

  1. 這是爲什麼?由於Nullable(Of T)結構是專門爲這種類型的情況創建的,因此爲什麼默認行爲是HasValue = True
  2. 什麼是初始化Nullable(Of T)實際上是null的最佳方法?

謝謝!

回答

3

如果您向Nullable構造函數提供值,那麼它將具有給定的值,這會導致您描述的場景HasValue爲真。

要聲明與false一個HasValue可爲空的,你可以利用這些方法之一:

Dim x As Nullable(Of DateTime) 
Dim y As DateTime? 

不過,如果您使用的構造和提供的值,可爲空的結構不會有空值,這是HasValuetrue

Dim z As New Nullable(Of DateTime)(DateTime.Now) 
2

艾哈邁德的回答是好。還有一個空的構造,即使奇怪的是,有它的MSDN上的無痕:

Dim x As New Nullable(Of DateTime) 
Debug.Assert(x.HasValue = False) 

正如預期的那樣,HasValue爲假。如果你有一個可以爲空(T)與價值,並希望刪除該值,你只需將它設置爲任何東西,因爲如果它是一個引用類型:

x = New Date(2011, 1, 1) 
x = Nothing 
Debug.Assert(x.HasValue = False) 
+0

你確定這是正確的?我幾乎肯定我正在嘗試使用Dim x作爲新的Nullable(Of DateTime)'並返回一個HasValue = True和Value ='1/1/0001 00:00''的對象。我錯了嗎? – mbm29414

+0

有一個原因,我把這些Debug.Assert在示例代碼中,我跑這個代碼和Asserts保證HasValue確實是錯誤的;-) –

相關問題