Dre*_*pin 3 vb.net iif-function ternary-operator
在我的ASP.Net Web应用程序中,我收到此错误:
从类型"DBNull"到"布尔"类型的转换无效.
从这个功能:
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
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我明确地检查是否Item是DBNull,如果是,那么我回来了False.
没有错误没有发生时Item是没有 DBNull的,所以我不明白为什么会这样.
Den*_*aub 11
使用时IIf,无论条件的计算结果是true还是false,都会对所有参数进行求值.在你的情况下,false如果Item为null或DBNull,函数将返回,但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
Run Code Online (Sandbox Code Playgroud)
摘自MSDN:
一个
IIf函数始终计算所有三个它的参数,而一个If有三个参数操作只判断其中的两个.