为什么这个指数超出范围?我该如何解决?

时间:2013-10-27 23:25:34

标签: vb.net visual-studio-2012

我有以下代码:

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异常。

1 个答案:

答案 0 :(得分:3)

您遇到异常,因为您正在尝试取消引用不存在的数组元素。如果你输入的只是“ping”,那么你的PingSplit数组只会有一个元素,在索引0处。但是你试图引用第二个元素:

PingSplit(1)

在尝试引用可能不存在的元素之前,需要检查数组的长度。这样的东西可能会起作用(我的VB有点生疏,我不能100%确定这是你检查长度的方式):

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

基本上,每当你要引用集合中的项目时,你应该首先检查集合,以确保这些项目存在。