我在VB.net中遇到了无法预测的无效预测效果。有问题的对象有一个定义的属性:
Public Property Value As Int32?
当我尝试使用IIf
合并该值时,我得到一个空异常
cmd.Parameters.AddWithValue("@HOValue", IIf(headOffice.Value.HasValue, headOffice.Value .Value, DBNull.Value))
在C#中,我知道没有隐式转换为nullables,因此你不能使用??
,但为什么在VB.NET中评估IIf的第一部分?
答案 0 :(得分: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
答案 1 :(得分:3)
Iff
是一个函数,即它的参数在执行之前被计算。如果headOffice.Value
为空,则无法在此处评估headOffice.Value.Value
。