我在VB.NET中有以下代码:
Public Sub Test(ByRef clientId As Nullable(Of Integer))
Dim t As Object = IIf(clientId.HasValue, clientId.Value, DBNull.Value)
End Sub
主叫方将Nothing
传递为clientId
值,但是当我运行此语句时,我得到了异常。
Nullable对象必须具有值
我的陈述是错的吗?
答案 0 :(得分:5)
将其更改为使用“如果”:
Dim t As Object = If(clientId.HasValue, clientId.Value, DBNull.Value)
“IIf”的问题在于它只是一个函数调用 - 所有参数总是被评估,而VB'If'运算符的行为类似于'?' C#/ Java中的运算符 - 它只评估需要评估的内容。