アカウント名:
パスワード:
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と評価されない方が良かったのだろう。
ごめん3行目書き間違えた。誤)従ってBooleanに変換すればfalseに評価される。正)従ってBooleanに変換すればtrueに評価される。
Nullではないから。
まあ、そんなところだろうね。
DBNullは(ADOの文脈において)falseと評価されない方が良かったのだろう。
DBNullのインスタンスが、DBNull型だ、ってことを判断できる方法があれば良いだけじゃん、って気がするけどね。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
DBNull.ValueはNull参照ではないから (スコア:1)
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と評価されない方が良かったのだろう。
Re:DBNull.ValueはNull参照ではないから (スコア:1)
ごめん3行目書き間違えた。
誤)従ってBooleanに変換すればfalseに評価される。
正)従ってBooleanに変換すればtrueに評価される。
Re:DBNull.ValueはNull参照ではないから (スコア:1)
Nullではないから。
まあ、そんなところだろうね。
DBNullは(ADOの文脈において)falseと評価されない方が良かったのだろう。
DBNullのインスタンスが、DBNull型だ、ってことを判断できる方法があれば良いだけじゃん、って気がするけどね。