2009-11-12 21 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