VB.NET Nullables

时间:2011-09-14 13:05:03

标签: .net asp.net vb.net nullable

我在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的第一部分?

2 个答案:

答案 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