パスワードを忘れた? アカウント作成
13430112 journal
データベース

Ryo.Fの日記: [bool]$DBNull 3

日記 by Ryo.F

PS C:\> [bool]$null
False
PS C:\> [bool][DBNull]::Value
True
PS C:\>

なんでやねん。

この議論は、Ryo.F (3896)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
  • DBNullはC#/VBにNullable値もジェネリックメソッドもがなかった時代のADOの遺物で、「そのレコードにはNull値が格納されている」ことを示すために用意された型であって、Nullではないから。
    そしてDBNull.Valueは、みんながDBNullを個別にインスタンス化して使うと不経済だからコレを使ってね、というシングルトンへの参照であって、Null参照ではない。
    従ってBooleanに変換すればfalseに評価される。

    とは言えBooleanへの変換でfalseを返す型変換メソッドを定義していても良さそうなものだけど、
    DBNull.Valueの利点はEqualsメソッドによって任意の値がDBNullであるか否かを判別できる所にある。
    その中には当然Boolean型との比較もあり、その値はDB上ではNull許容1ビット整数として格納されていたものだろう。
    つまりnull値とfalse値が同一視されては困るわけで、DBNullは(ADOの文脈において)falseと評価されない方が良かったのだろう。

typodupeerror

日々是ハック也 -- あるハードコアバイナリアン

読み込み中...