vb.net - IIf抛出奇怪的异常

时间:2011-03-30 23:12:51

标签: vb.net ternary-operator iif

我有一个奇怪的问题。当我使用数组时,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))

2 个答案:

答案 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例外。

相关问题