0

次のコードがあります。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
  If Not TextBox1.Text = "" Then
    If TextBox1.Text.Contains("ping") Then
      PingSplit = TextBox1.Text.Split(" ")
    End If

    Select Case True
      Case TextBox1.Text.Contains("ping")
        ' I get an IndexOutOfRange Exception was unhandled on below line
        If PingSplit(0) Is Nothing Or PingSplit(1) Is Nothing Then
          MsgBox("Invalid Ping IP!")
        Else
          ListBox1.Items.Add(GetPingMs(PingSplit(1)))
          PingSplit(0) = vbNullString
          PingSplit(1) = vbNullString
        End If
End Sub

ただし、「ping」と入力するだけではコードが機能しません。「ping www.google.com[1]」は完全に機能しますが、ping だけでは機能しません。ping "x" を入力すると、コードは ping を分割してアドレス (x) を取得し、そのアドレスを GetPingMs 関数 (getpingMsg(pingsplit(1))) で使用しますが、IndexOutOfRange 例外が発生します。

4

1 に答える 1

3

存在しない配列要素を逆参照しようとしているため、例外が発生しています。入力するのが「ping」だけの場合、PingSplit配列にはインデックス 0 に 1 つの要素しかありません。しかし、2 番目の要素を参照しようとしています。

PingSplit(1)

存在しない可能性のある要素を参照する前に、配列の長さを確認する必要があります。このようなものがうまくいくかもしれません (私の VB は少し錆びています。これが長さをチェックする方法であるとは 100% 確信が持てません):

If PingSplit.Length < 2 Then
    MsgBox("Invalid Ping IP!")
End If

基本的に、コレクション内のアイテムを参照するときは常に、最初にコレクションをチェックして、それらのアイテムが存在することを確認する必要があります。

于 2013-10-27T23:31:01.173 に答える