使用If-Statement作为Vb.net中For-Loop的测试条件

时间:2016-08-09 19:56:04

标签: vb.net if-statement for-loop

我已经在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循环控件的标题内具有相同的功能。

2 个答案:

答案 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循环
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