I'm experiencing unpredicted effects with nullables in VB.net. The object in question has a property defined:
Public Property Value As Int32?
When I try to coalesce the value using IIf, I get a null exception
cmd.Parameters.AddWithValue("@HOValue", IIf(headOffice.Value.HasValue, headOffice.Value .Value, DBNull.Value))
In C#, I know there's no implicit conversion for nullables, hence you can't use ??, but why is the first part of the IIf being evaluated in VB.NET?
The reson for this is that Iif is a function, so both the true value and false value are evaluated before the condition.
Instead, use If i.e.:
cmd.Parameters.AddWithValue("@HOValue", If(headOffice.Value.HasValue, headOffice.Value.Value, DBNull.Value)) ' Assuming you've already checked that headOffice.Value IsNot Nothing
Iff is a function, i.e. its arguments are evaluated before it is executed. When headOffice.Value is null, then headOffice.Value.Value cannot be evaluated here.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With