2012-01-18 5 views
3

ないことを確認した後、私はこのエラーを取得しています:「タイプからの変換 『はDBNull』 『ブール』は有効ではありません入力する」、それは私のASP.NetのWebアプリケーションではDBNull

Conversion from type 'DBNull' to type 'Boolean' is not valid.

からこの機能:あなたが見ることができるようにItemDBNullであり、それがあるならば、私はFalseを返す場合

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いるときにエラーが発生しないので、これが起こっている理由を私は理解していません。

答えて

10

IIfを使用すると、条件がtrueまたはfalseと評価されても、すべての引数が評価されます。項目が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 

抜粋MSDNから:

An IIf function always evaluates all three of its arguments, whereas an If operator that has three arguments evaluates only two of them.

関連する問題