我有以下代码:
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异常。
答案 0 :(得分:3)
您遇到异常,因为您正在尝试取消引用不存在的数组元素。如果你输入的只是“ping”,那么你的PingSplit
数组只会有一个元素,在索引0处。但是你试图引用第二个元素:
PingSplit(1)
在尝试引用可能不存在的元素之前,需要检查数组的长度。这样的东西可能会起作用(我的VB有点生疏,我不能100%确定这是你检查长度的方式):
If PingSplit.Length < 2 Then
MsgBox("Invalid Ping IP!")
End If
基本上,每当你要引用集合中的项目时,你应该首先检查集合,以确保这些项目存在。