2014-02-13 58 views
8

使用這些變量:'?'性格不能在這裏

Dim d1 As Date? = Nothing 
Dim d2 As DateTime? = Nothing 
Dim i1 As Integer? = Nothing 
Dim i2 As Int32? = Nothing 

我爲什麼允許這樣做?:

Dim flag1 As Boolean = Date?.Equals(d1, d2) 
Dim flag2 As Boolean = Integer?.Equals(i1, i2) 

...但不允許這樣做?:

Dim flag3 As Boolean = DateTime?.Equals(d2, d1) 
Dim flag4 As Boolean = Int32?.Equals(i2, i1) 

最後一段代碼將失敗,並顯示一條錯誤消息:

'?'字符不能在這裏使用。

+5

呵呵。編譯器錯誤。 –

+0

任何人都可以重現嗎? –

+0

Me @ VS 2010 SP1。 – Neolisk

回答

2

VB.NET開發人員不應該使用C#關鍵字(宗教,你知道)。說真的,我同意@Konrad這看起來像一個編譯器錯誤。如果你有其他VS,在那裏試試,我只在VS 2010 SP1中試過,因爲這是我在工作中的。如果你注意到一致性,也許你應該在connect上報告。作爲一種變通方法,你可以試試這個:

Dim flag3 As Boolean = d1.Equals(d1) 
Dim flag4 As Boolean = i2.Equals(i1) 

或者這樣:

Dim flag3 As Boolean = Nullable(Of DateTime).Equals(d1, d2) 
Dim flag4 As Boolean = Nullable(Of Int32).Equals(i1, i2) 

我個人比較喜歡最後一個選項在我的代碼,明確地說Nullable(Of T),因爲VB語言應該是冗長的,更像英語,即沒有:? || &&構造(沒有違法,C#開發者)。