6

在我的 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

如您所见,我正在明确检查 if Itemis DBNull,如果是则我 return False

当is not时错误不会发生,所以我不明白为什么会这样。Item DBNull

4

1 回答 1

13

使用IIfthen 时,所有参数都会被评估,无论条件评估为真还是假。false在您的情况下,如果ItemnullDBNull ,该函数将返回,但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函数总是计算它的所有三个参数,而具有If三个参数的运算符只计算其中两个。

于 2012-01-18T16:17:04.843 回答