我需要做类似的事情:

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

当然,使用这种方法时我会遇到错误,所以我的问题是如何重写它以避免“未为 dbnull 和某些内容定义运算符”错误?

最佳答案

有几种方法可以解决这个问题,您使用的方法可能取决于您正在使用的值。但是,如果您想要捕获所有条件的东西,那么我会这样做:

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

关于vb.net - dbnull 和 value 的 if 语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1723442/

10-10 03:05