【问题标题】:"Conversion from type 'DBNull' to type 'Boolean' is not valid", after checking that it's not DBNull“从类型 'DBNull' 到类型 'Boolean' 的转换无效”,在检查它不是 DBNull 之后
【发布时间】:2012-01-18 16:13:17
【问题描述】:

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

Itemnot DBNull 时,确实会出现错误not,所以我不明白为什么会这样。

【问题讨论】:

    标签: vb.net ternary-operator iif-function


    【解决方案1】:

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

    【讨论】:

    • 哇,如果真的很糟糕。
    • 虽然在我看来 If 有类似的问题 :(
    猜你喜欢
    • 1970-01-01
    • 2014-06-10
    • 2012-11-19
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多