2011-09-14 9 views
3

VB.netでnull可能性のある予期しない結果が発生しています。問題のオブジェクトが定義されたプロパティがあります。VB.NET nullable

Public Property Value As Int32? 

私はIIfを使用して値を合体しようとすると、私はC#ではnullの例外

cmd.Parameters.AddWithValue("@HOValue", IIf(headOffice.Value.HasValue, headOffice.Value .Value, DBNull.Value)) 

を取得し、私はnullablesのための暗黙的な変換はありません知っています、したがって、??を使用することはできませんが、IIfの最初の部分がVB.NETで評価されるのはなぜですか?

+4

も参照してください:理にかなって、さらに私のVBの憎悪を激化http://stackoverflow.com/q/576431 –

答えて

3

Iffは関数です。つまり、引数が実行される前に評価されます。 headOffice.Valueがヌルの場合は、ここでheadOffice.Value.Valueを評価することはできません。

+0

。しかし、情報をありがとう。 – Echilon

+2

@エチロンあなたがこの痛みなしにしたいことをする3部の 'If'もあります。 –

+1

vb 2008以降のif文は、求めている3項演算子のように動作します。 If(headOffice.Value.HasValue、headOffice.Value.Value、DBNull.Value) http://blogs.msdn.com/b/vbteam/archive/2008/03/11/if-operator-a-new- and-improved-iif-sophia-salim.aspx – CheckRaise

9

Iifは関数なので、条件の前にtrueの値とfalseの値の両方が評価されます。代わりに

、すなわちIfを使用:

cmd.Parameters.AddWithValue("@HOValue", If(headOffice.Value.HasValue, headOffice.Value.Value, DBNull.Value)) ' Assuming you've already checked that headOffice.Value IsNot Nothing