2

一部の 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

正しく動作します。ありがとうスティーブ。

4

3 に答える 3

5

とinIsNotの間にスペースを入れずに使用する必要があります。したがって、コードは次のようになります。'Is''Not'vb

If x.Value IsNot Nothing Then  
   ...do Stuff...
Else 
   ...do else stuff...
End IF
于 2015-04-17T16:03:29.770 に答える
4

If x.Value Is DBNull.Value Then ... を使用

于 2013-10-16T19:55:39.187 に答える