2016-05-15 10 views
0

猜的i結果:Visual Basic中的可空類型推斷 - 是否在某處存在文檔並且可以使其更加嚴格?

Dim i As Integer? = If(True, Nothing, 3) 

答:0

如果你希望得到Nothing,必須修改整數參數:

Dim i As Integer? = If(True, Nothing, New Nullable(3)) 

正如你所看到的,在Nullable(Of T)之前,來自第二和第三參數的結果類型推斷優選T。對我而言,邏輯是相反的。

如果可以找到這些推理/優先級規則的類型(尤其是Nullable)可以找到文件?我檢查了幫助type inference,NullableIf,但我找不到任何東西。

甲窺視到鄰居:(很好)拒絕,錯誤

無法確定條件表達式的CS0173型因爲'<null>'之間的隱式轉換以編譯的等效

int? i = true ? null : 3; 

和'int'

什麼是安全的,避免陷入捕獲看n在。但在VB中,即使Option Infer Off + Option Strict On也沒有任何錯誤拋出的效果,這可以幫助程序員避免被忽視的錯誤。 或者有沒有辦法在中產生錯誤?

+0

@GSerg - 哈,我總是想知道是否有一個有效的理由可以存在,我會投票結束我自己的問題。現在我投了... – miroxlav

回答

0

好吧,現在我明白了。罪魁禍首是在解釋Nothing。的Nothing

更改爲「true」 null導致正確的結果:

Dim i As Integer? = If(True, New Nullable(Of Integer), 3) 

結果:i Is Nothing

所以可能出現的問題是,Nothing似乎是由編譯器首先視爲默認值其他類型(Integer)比null。改變其隱含意義有助於。反正一個棘手的地方。 如果有人可以找到這個記錄,這將是很好的。(我不堅持這個答案)。如果VB可以在這種情況發生時被強制拋出一個錯誤或警告,這與C#類似。


comment其他地方看到,符號的形式,更好的可能存在:

Dim i As Integer? = If(True, Integer?, 3) 

不錯!

+0

這也可以 - Dim i As Integer? = If(True,Nothing,New Nullable(Of Integer)(3)) – dbasnett

相關問題