"Conversion from type 'DBNull' to type 'Boolean' is not valid",在检查它不是 DBNull 之后



在我的ASP.Net Web应用程序中,我收到了以下错误:

从类型"DBNull"到类型"Boolean"的转换无效。

来自此功能:

Namespace atc
    Public Class Nil
        '...
        Public Shared Function Bool(ByVal Item As Object) As Boolean
            Return IIf(Item IsNot Nothing AndAlso Not IsDBNull(Item), CBool(Item), False)
        End Function
        '...
    End Class
End Namespace

正如您所看到的,我显式地检查Item是否为DBNull,如果是,则返回False

Item而不是DBNull时,会发生不是的错误,所以我不明白为什么会发生这种情况。

使用IIf时,无论条件的计算结果是true还是false,都会计算所有参数。在您的情况下,如果ItemnullDBNull,则函数将返回false,但CBool(Item)无论如何都将在后台静默执行,因此引发异常。

在VB.NET 2008中,添加了If关键字以提供真正的三元运算符。用以下内容替换IIf函数调用:

Public Shared Function Bool(ByVal Item As Object) As Boolean
    Return If(Item IsNot Nothing AndAlso Not IsDBNull(Item), CBool(Item), False)
End Function

摘自MSDN:

IIf函数总是计算其所有三个参数,而具有三个自变量的CCD_ 12运算符仅计算其中两个自变量。

相关内容

最新更新