vb.net-IIf引发奇怪异常
我有一个奇怪的问题。当我使用阵列时,IIf会搞砸。显然,它正在检查我的else语句,即使它没有被激活。下面是一些演示此问题的代码: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
'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同时评估了真假情况,那么它的意义何在?@PhilIIF
至少从VB 7(VB.Net的原始版本)开始就存在了。在那个时候,VB并没有为他们的大多数构造实现短路(和
/或
实际上并没有短路)。该功能是在当时设计的,因此没有添加短路逻辑