我有一个奇怪的问题。当我使用数组时,IIf正在搞乱。显然它正在检查我的其他声明,即使它没有被激活。以下是一些演示此问题的代码:
'works
Dim test As String = "bleh"
If values.Length < 6 Then
test = "200"
Else
test = values(5)
End If
'throws indexoutofrange exception
Dim itemLimit As String = IIf(values.Length < 6, "200", values(5))
答案 0 :(得分:9)
Iif
运算符未实现短路,并将评估真假情况。如果您需要短路版本,请使用If
。
Dim itemLimit As String = If(values.Length < 6, "200", values(5))
答案 1 :(得分:1)
看一下这篇文章:http://www.fmsinc.com/free/newtips/net/nettip33.asp
来自文章:
Visual Basic,VBA和Visual Basic .NET支持IIF功能 If ... Then ... Else的替代品 声明。虽然这看起来像 快捷方式,IIF功能不同 比如果......那么......其他。
IIF必须评估整个声明 在准备论证时,可以 导致不良副作用。
换句话说,您的If...Then...Else
有效,因为如果条件失败,则不会评估Else
子句。另一方面,IIf
评估所有语句,导致IndexOutOfBounds
例外。