我写了一段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然后发送电子邮件。这段代码是程序的一部分,它将检索这些电子邮件,将它们与计算机列表进行比较,然后生成摘要电子邮件,说明哪些计算机不存在,启用了bitlocker,禁用或处于未知状态。< / p>
我确信还有另一种更好的方法可以做到这一点,但正如我所说,我对此很新,我们需要出于法律原因这样做。
再次感谢!
编辑:如果您需要更多信息,请问我!
答案 0 :(得分:4)
您的If…Then
行需要分解。将Then
之后的所有内容移到下一行,你应该很好。
If compArray(I) <> Computers.GetKey(I) Then notpresentList.Add(Computers.GetKey(I))
一行上的 If…Then
语句是自包含的,不会使用终止End If
,也不会使用ElseIf
。
答案 1 :(得分:4)
我会在短而简单的条件下使用VB.NET中的内联语法。否则会使代码的可读性降低,而且容易出错。
试试这个:
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
答案 2 :(得分: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
有关语法的详细信息,请查看If
语句中的MSDN页面。
答案 3 :(得分:1)
单行If
应始于If
:
即
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