我試圖使用下面的代碼來檢查DBNull
並將該變量設置爲空,如果是,則將其設置爲空,如果不是,則設置爲空。問題是它沒有將變量設置爲Nothing
,而是將其設置爲0
。任何人都知道爲什麼?設置一個變量爲空值inline if語句
variable = If(currentRow.Item("variable") Is DBNull.Value,
Nothing, CShort(currentRow.Item("variable")))
我試圖使用下面的代碼來檢查DBNull
並將該變量設置爲空,如果是,則將其設置爲空,如果不是,則設置爲空。問題是它沒有將變量設置爲Nothing
,而是將其設置爲0
。任何人都知道爲什麼?設置一個變量爲空值inline if語句
variable = If(currentRow.Item("variable") Is DBNull.Value,
Nothing, CShort(currentRow.Item("variable")))
如果variable
聲明As Short?
然後代碼工作有輕微的調整:你需要的If
一個操作數轉換爲目標類型第一:
variable = If(condition, CType(Nothing, Short?), CShort(…))
(您也紛紛投第三操作數,或兩者兼而有之。)
由於If
如何推導出類型,因此這種轉換是必需的:如果兩種結果類型不匹配,則推導出一種通用類型,即最接近父類型,即兩者都繼承的類型。然而,Nothing
,新的規則發揮作用,因爲就VB而言,Nothing
已經是一個有效的Short
- 一個默認初始化(請參閱下面的舊答案的解釋)。所以VB不會嘗試任何類型的強制,它只是使用Short
作爲返回值。
舊下面的答案,假設OP宣佈variable As Short
:
您不能設置值類型Nothing
。如果您將Nothing
指定爲值類型,那麼它將被設置爲其類型的默認值,而不是,即Short
。
您可以輕鬆地測試:
Dim s as Short = Nothing
Console.WriteLine(s)
值類型設置爲Nothing
是一樣調用它的默認構造函數(New Short()
)或聲明該類型的新變量初始化沒有它。 C#中的相應操作將分配爲default(T)
(short s = default(short)
)。
如果你想表示null
值類型,你必須使用nullable types:
Dim s as Short? = Nothing
現在s
是Nullable<Short>
型(Short?
就是一個快捷鍵),可以分配適當Nothing
。
沒錯,但我的變量已經在上面聲明(應該提到那個)爲「Short?」。那麼,這不應該工作嗎? – Tomcat
@ user1335008啊。這改變了一切。等等,讓我編輯答案。 –
太棒了,那正是我需要的! – Tomcat