首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“从' DBNull‘到'Boolean’类型的转换无效”,在检查它不是DBNull之后

“从' DBNull‘到'Boolean’类型的转换无效”,在检查它不是DBNull之后
EN

Stack Overflow用户
提问于 2012-01-18 16:13:17
回答 1查看 9.3K关注 0票数 6

在我的ASP.Net网络应用程序中,我得到了以下错误:

从类型‘

’到类型'DBNull‘的转换是无效的。

从这一职能:

代码语言:javascript
复制
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,如果为DBNull,则返回False

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-18 16:17:04

当使用IIf时,所有参数都会被计算,不管条件是true还是false。在您的示例中,如果Item为null或DBNull,则函数将返回DBNull,但无论如何CBool(Item)将在后台默默执行,因此抛出一个异常。

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

代码语言:javascript
复制
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操作符只计算其中两个参数。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8913447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档