2009-11-12 53 views
2

我需要的東西,如:如果語法的DBNull和價值

if isdbnull(value) or value = something then 
'do something 
else 
'do something else 
end if 
當然

我用這個方法得到一個錯誤,所以我的問題是怎麼做的我把它改寫,以避免沒有定義」運營商dbnull和一些「錯誤?

回答

5

有幾個方法可供選擇,並且您使用可能取決於你正在使用的值。但是,如果你想要的東西,抓住所有的條件,那麼我這樣做:

If Value Is Nothing OrElse IsDbNull(value) Then 
    'do something 
Else 
    'do something else 
End If 

這將檢查如果該值是什麼,有時會發生沒有實際是DBNull的價值。

但是最重要的部分是OrElse。 OrElse是短路運算符,只要運行時知道結果會是什麼,它就會終止對條件的評估。相比之下,Or運算符將執行整個條件,無論如何,這就是您的原始代碼失敗的原因。

編輯:

現在,我在你的示例代碼再看看,我可以看到我的NOTNULL()函數可以幫助你:

Public Shared Function NotNull(Of T)(ByVal Value As T, ByVal DefaultValue As T) As T 
    If Value Is Nothing OrElse IsDBNull(Value) Then 
     Return DefaultValue 
    Else 
     Return Value 
    End If 
End Function 

用法:

if NotNull(value, something) = something then 
'do something 
else 
'do something else 
end if 
+0

我很確定這正是問題所要求的,但關鍵在於「OrElse」部分。 – Jimmy

+1

這就是它! OrElse做到了,非常感謝! – Iulian

+0

當然,沒問題。實際上,現在我再次查看您的原始代碼,我可以看到我的NotNull函數如何幫助您。 –

0
value Is DBNull.Value 
+1

我仍然得到運營商「=」沒有爲類型定義「的DBNull」和字符串「東西」。 – Iulian

-1

值是什麼

+1

不,問題出在「或value = something」部分,這就是導致異常的原因 – Iulian

3

我傾向於使用OrElse,並且還有運營商

If IsDBnull(value) OrElse value = something Then 
    ''#do something 
Else 
    ''#do something else 
End If 

快捷鍵操作符意味着如果第一個條件爲真,則If條件的其餘部分將不會執行。

編輯:史蒂夫打我給它,而我是格式化我的回答:)

+0

:)你仍然得到了嘗試的投票,謝謝 – Iulian

+0

嘿,謝謝:)格式化將是我的死亡... – Cylindric