Vb.net &引用;从类型转换为';DBNull';输入';布尔值';“无效”;,在检查它';它不是DBNull
在我的ASP.Net Web应用程序中,我遇到以下错误: 从类型“DBNull”到类型“Boolean”的转换无效 从该函数:Vb.net &引用;从类型转换为';DBNull';输入';布尔值';“无效”;,在检查它';它不是DBNull,vb.net,ternary-operator,iif-function,Vb.net,Ternary Operator,Iif Function,在我的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),
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
如您所见,我正在显式检查项
是否为DBNull
,如果是,则返回False
当
项
为非DBNull
时,会发生非错误,因此我不理解为什么会发生这种情况 当使用IIf
时,所有参数都会得到计算,无论条件的计算结果是真还是假。在您的情况下,如果Item为null或DBNull,函数将返回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
摘录自:
IIf
函数始终计算其所有三个参数,而
具有三个参数的If
运算符只计算其中两个参数
哇,iff真的很糟糕。虽然在我看来If也有类似的问题:(