vb.net-IIf引发奇怪异常

vb.net-IIf引发奇怪异常,vb.net,ternary-operator,iif,Vb.net,Ternary Operator,Iif,我有一个奇怪的问题。当我使用阵列时,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(v

我有一个奇怪的问题。当我使用阵列时,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))
“工作原理”
尺寸测试为String=“bleh”
如果值.Length<6,则
test=“200”
其他的
测试=数值(5)
如果结束
'引发IndexOutfrange异常
Dim itemLimit作为字符串=IIf(值。长度<6,“200”,值(5))

看看这篇文章:

从文章中:

Visual Basic、VBA和Visual Basic .NET支持IIF函数作为 如果…那么…否则的替代方案 陈述虽然这看起来像 作为一种快捷方式,IIF的功能不同 如果…那么…其他的

IIF必须评估整个语句 在准备论点时,哪一个可以 导致不良副作用


换句话说,您的
If…Then…Else
有效,因为如果条件失败,
Else
子句不会被计算。另一方面,
IIf
对所有语句进行求值,导致
索引自动边界
异常。

IIf运算符不执行短路,将对正确和错误情况进行求值。如果需要短路版本,请使用
If

Dim itemLimit As String = If(values.Length < 6, "200", values(5))
Dim itemLimit As String=If(values.Length<6,“200”,values(5))

您使用的是什么版本的VisualStudio?我使用的是Microsoft Visual Basic 2010 Express。可能是重复的,谢谢!您提供了问题和解决方案。我唯一的问题是,如果IIF同时评估了真假情况,那么它的意义何在?@Phil
IIF
至少从VB 7(VB.Net的原始版本)开始就存在了。在那个时候,VB并没有为他们的大多数构造实现短路(
/
实际上并没有短路)。该功能是在当时设计的,因此没有添加短路逻辑