5

我有一段我写的 vb.net 代码。这是一个带有两个嵌入式 if 语句的 for 循环,编译器告诉我每个 elseif 和 endif 必须以匹配的 if 开头。

这是我使用 vb.net 的第二天,我唯一的编程经验是编写 .bat 文件,所以这可能是非常愚蠢的事情。但是我不知道为什么会出现这些错误,如果你们都愿意帮助我,我将不胜感激!

For Each computer In compArray
        If compArray(I) <> Computers.GetKey(I) Then notpresentList.Add(Computers.GetKey(I)) 
Else 
        If Computers.GetByIndex(I) = 0 Then disabledList.Add(Computers.GetKey(I))
        Elseif Computers.GetByIndex(I)=1 Then enabledList.Add(Computers.GetKey(I))
        Elseif Computers.GetByIndex(I)=2 Then unknownList.Add(Computers.GetKey(I))
    End if
    End if
        I += 1
    Next

上下文:我正在尝试编写一段代码来确认 bitlocker 的存在。我在 VBScript 中写了一些东西来检查是否启用了 bitlocker,然后发送电子邮件。这段代码是程序的一部分,该程序将检索这些电子邮件,将它们与计算机列表进行比较,然后生成一个摘要电子邮件,其中说明哪些计算机不存在、哪些计算机已启用、禁用或处于未知状态。

我确信还有另一种更好的方法可以做到这一点,但正如我所说,我在这方面还很陌生,出于法律原因,我们需要这样做。

再次感谢!

编辑:如果您需要更多信息,请问我!

4

4 回答 4

5

你的If…Then线路需要被打破。将所有内容移至Then下一行,您应该会很好。

If compArray(I) <> Computers.GetKey(I) Then notpresentList.Add(Computers.GetKey(I)) 

If…Then一行中的语句是自包含的,后面没有终止符End If,并且不能使用ElseIf.

于 2013-06-07T15:50:18.997 回答
5

我会在 VB.NETonly 中使用简短且简单的条件的内联语法。否则,它会使代码的可读性降低并且更容易出错。

尝试这个:

For Each computer In compArray
    If compArray(i) <> Computers.GetKey(i) Then
        notpresentList.Add(Computers.GetKey(i))
    Else
        Dim comp = Computers.GetByIndex(i)
        If comp  = 0 Then
            disabledList.Add(Computers.GetKey(i))
        ElseIf comp = 1 Then
            enabledList.Add(Computers.GetKey(i))
        ElseIf comp = 2 Then
            unknownList.Add(Computers.GetKey(i))
        Else ' added this to show you that this case is not covered yet
            Throw New NotSupportedException
        End If
    End If
    i += 1
Next
于 2013-06-07T15:53:19.387 回答
3

您的困惑在于If语句的 VB.NET 语法。VB.NET 允许两种不同的格式,每种格式都有不同的语法规则:单行If语句和多行If块。

单行If语句如下所示(注意没有End If):

If x Then y = 1

多行If块如下所示:

If x Then
    y = 1
End If

当您将代码放在同一行,在 之后Then,它假定您打算将其作为单行If语句。单行If语句不能包含ElseIf, 也不能包含Else条件。它们只能用于简单的条件。If因此,为了使您的代码正常工作,您需要通过将条件代码放在下一行来将其格式化为多行块,如下所示:

For Each computer In compArray
    If compArray(I) <> Computers.GetKey(I) Then 
        notpresentList.Add(Computers.GetKey(I)) 
    Else 
        If Computers.GetByIndex(I) = 0 Then 
            disabledList.Add(Computers.GetKey(I))
        Elseif Computers.GetByIndex(I)=1 Then 
            enabledList.Add(Computers.GetKey(I))
        Elseif Computers.GetByIndex(I)=2 Then 
            unknownList.Add(Computers.GetKey(I))
        End if
    End if
    I += 1
Next

有关语法的更多信息,请查看MSDN页面上的If语句。

于 2013-06-07T15:55:54.667 回答
1

单行If应该都以 just 开头If

IE

If Computers.GetByIndex(I) = 0 Then disabledList.Add(Computers.GetKey(I))
If Computers.GetByIndex(I) = 1 Then enabledList.Add(Computers.GetKey(I))
If Computers.GetByIndex(I) = 2 Then unknownList.Add(Computers.GetKey(I))

您还可以使用Select Case使其更具可读性,即

Select Case Computers.GetByIndex(I)

Case 0
  disabledList.Add(Computers.GetKey(I))
Case 1
  enabledList.Add(Computers.GetKey(I))
Case 2
  unknownList.Add(Computers.GetKey(I))
Case Else
 ' Some sort of default action can go here, useful for error catching/prevention
End Select
于 2013-06-07T16:11:35.807 回答