在我的ASP.Net网络应用程序中,我得到了以下错误:
从类型‘
’到类型'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如您所见,我正在显式检查Item是否为DBNull,如果为DBNull,则返回False。
当不是 DBNull时,Item没有发生错误,所以我不明白为什么会发生这种情况。
发布于 2012-01-18 16:17:04
当使用IIf时,所有参数都会被计算,不管条件是true还是false。在您的示例中,如果Item为null或DBNull,则函数将返回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摘录自MSDN:
一个
IIf函数总是计算它的所有三个参数,而一个有三个参数的If操作符只计算其中两个参数。
https://stackoverflow.com/questions/8913447
复制相似问题