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