4

我有一个奇怪的问题。当我使用数组时,IIf 搞砸了。显然它正在检查我的 else 语句,即使它没有被激活。这是一些演示该问题的代码:

'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))
4

2 回答 2

9

操作员不实施短路,Iif并将评估真假情况。如果您想要短路版本,请使用If.

Dim itemLimit As String = If(values.Length < 6, "200", values(5))
于 2011-03-30T23:18:32.610 回答
1

看看这篇文章:http ://www.fmsinc.com/free/newtips/net/nettip33.asp

来自文章:

Visual Basic、VBA 和 Visual Basic .NET 支持 IIF 函数作为 If...Then...Else 语句的替代方法。尽管这看起来像是一个捷径,但 IIF 的功能与 If...Then...Else 不同。

IIF 必须在准备论点时评估整个语句,这可能会导致不良的副作用。

换句话说,您的If...Then...Else工作是因为Else如果条件失败,则不会评估该子句。IIf另一方面,评估所有语句,导致异常IndexOutOfBounds

于 2011-03-30T23:16:06.243 回答