VB.NET Nullables

Ech*_*lon 3 .net vb.net asp.net nullable

我在VB.net中遇到了无法预测的无效预测效果.有问题的对象定义了一个属性:

Public Property Value As Int32?
Run Code Online (Sandbox Code Playgroud)

当我尝试使用合并值时IIf,我得到一个null异常

cmd.Parameters.AddWithValue("@HOValue", IIf(headOffice.Value.HasValue, headOffice.Value .Value, DBNull.Value))
Run Code Online (Sandbox Code Playgroud)

在C#中,我知道没有隐式转换为nullables,因此你不能使用??,但为什么在VB.NET中评估IIf的第一部分呢?

Row*_*haw 9

对此的共鸣是这Iif是一个函数,因此在条件之前评估true值和false值.

相反,使用Ifie:

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