一部の C# コードを VB.NET に変換しています。名前と値のペアを含む単純な辞書のようなデータ構造があります。値要素は Object 型です。私のC#コードは次のようになります
if(x.Value != null)
// 1: Store x.Value in database
else
// Sore DBNULL.Value in database
予想どおり、x.Value が値 false のブール値である場合、上記のコード ブロック 1 が実行されます。
ただし、同等の VB.NET コードは、False のブール値の else ブロックにフォールスルーします。
If x.Value Is Not Nothing Then
' Store x.Value in database
Else
' We land here if x.Value is a Boolean with a value of False and incorrectly store DBNULL.Value in database
EndIF
VB は明らかに、False 値を持つブール値は Nothing と同等であると考えています。VB に関するコメントは内緒にしておきますが、この問題を回避するための複雑でない方法、つまりリフレクションを使用しない方法はありますか?
編集:私の元のVBコードは実際には
If x.Value <> Nothing
それは説明どおりに機能しました。
If x.Value IsNot Nothing
正しく動作します。ありがとうスティーブ。