パスワードを忘れた? アカウント作成
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

開いた括弧は必ず閉じる -- あるプログラマー

読み込み中...