我已经在Vb.net中编写了一些软件,并且我已经在程序中找到了一个最佳位置,如果我可以在for-loop的头部放置一个if语句
例如,在java中,我可以实现我所需要的......
for (int I = 0; myArray[I].compareTo("") == 0; I ++)
{
'code here
}
不幸的是在Vb.net中,我所知道的是在for循环中将一个数字增加到给定的数字。但我知道,我需要做的就是使用for-loop
中的if-test来完成For I as Integer = 0 To myArray.length 'only possible test is comparison between two ints
'code here
If myArray(I).compareTo("") <> 0 Then
Exit For
End If
Next
要做到这一点并不是什么大不了的事情,但如果有办法将其更多地简化为for-loop控制,那么我想知道现在和未来的参考。
所以我的问题是,是否有可能在Vb.net的for循环标题内检查if条件(除了比较两个数字)?
更新:为了回应@Olivier Jacot-Descombes的回答,我只是想澄清一下,我知道while循环用于测试循环中的if条件,但它们会丢失for循环所具有的自动递增功能。在Java中,for循环可以完成这两个任务。这就是为什么我想知道Vb.net是否在for循环控件的标题内具有相同的功能。
答案 0 :(得分:3)
改为使用While循环
Dim i As Integer = 0
While i < myArray.Length AndAlso String.IsNullOrEmpty(myArray(i))
'Code here
i += 1
End While
在VB中,字符串可以为空(""
)或Nothing
(C#中为null
)。为了应对这两种情况,请使用String.IsNullOrEmpty(s)
。
AndAlso
(与And
不同)确保快捷方式评估。即如果第一个条件不是True
那么第二个条件将不会被评估。我们需要这个,否则数组会抛出“Index out of bounds”异常。另请注意,数组索引从0到array.Length - 1。
但您也可以使用Exit For
For I As Integer = 0 To myArray.Length-1
'code here
If Not String.IsNullOrEmpty(myArray(I)) Then
Exit For
End If
Next
但退出这样的循环可能会使代码无法读取。问题是For循环现在有2个退出点,并且在不同的地方定义了循环和退出条件。
还有Do...Loop statement允许您在循环结束时测试条件。
答案 1 :(得分:1)
简短的回答是否定的。 Visual Basic语言没有像C / java样式for()
循环那样的东西。
答案越长,根据您的需要,您甚至可能不需要循环。
Dim a = {"a", Nothing, "", "b"}
' this will print from 0 to 1, but Array.IndexOf returns -1 if value is not found
For i = 0 To Array.IndexOf(a, "") - 1
Debug.Print(i & "")
Next
For Each item In a : If item = "" Then Exit For ' this is actually 2 lines separated by :
Debug.Print("'{0}'", item)
Next
For Each item In a.TakeWhile(Function(s) s > "") ' TakeWhile is a System.Linq extension
Debug.Print("'{0}'", item)
Next
a.TakeWhile(Function(s) s > "").ToList.ForEach(AddressOf Debug.Print) ' prints a
a.TakeWhile(Function(s) s > "").ToList.ForEach(Sub(s) Debug.Print(s)) ' prints a