5

私が書いたvb.netコードがあります。これは、2 つの if ステートメントが埋め込まれた for ループであり、コンパイラは、各 elseif と endif の前に対応する if が必要であると指示しています。

vb.net を使用するのはこれで 2 日目ですが、プログラミングの経験は .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 の存在を確認するコードを書き込もうとしています。bitlocker が有効になっているかどうかを確認してから電子メールを送信するものを VBScript で作成しました。このコードは、これらの電子メールを取得し、コンピュータのリストと比較して、どのコンピュータが存在しないか、ビットロッカーが有効か無効か、または不明な状態かを示すダイジェスト メールを生成するプログラムの一部です。

これを行う別のより良い方法があると確信していますが、前述したように、私はこれにかなり慣れていないため、法的な理由でこれを行う必要があります.

再度、感謝します!

編集:さらに情報が必要な場合は、私に尋ねてください!

4

4 に答える 4

5

あなたのIf…Then行は分割する必要があります。すべてThenを次の行に移動すると、うまくいくはずです。

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

If…Then1 行のステートメントは自己完結型であり、最後End IfElseIf.

于 2013-06-07T15:50:18.997 に答える
5

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
于 2013-06-07T15:53:19.387 に答える
3

Ifあなたの混乱は、ステートメントの VB.NET 構文にあります。VB.NET では、それぞれが異なる構文規則を持つ 2 つの異なる形式を使用できます: 単一行Ifステートメントと複数行Ifブロックです。

1 行の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 に答える