我有这个简单的代码:
Public Class Form1
Dim strFriends(4) As String
Private Sub ArrayElement_Click(sender As Object, e As EventArgs) Handles ArrayElement.Click
ClearList()
'Try
For Each item As String In strFriends
lstFriends.Items.Add(item)
Next
'Catch
'End Try
End Sub
Private Sub ClearList()
lstFriends.Items.Clear()
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
strFriends(0) = "tom"
strFriends(1) = "kate"
strFriends(2) = "bill"
strFriends(3) = "harry"
End Sub
结束班
如果删除了try-catch,我得到System.ArgumentNullException
是否必须使用try catch块来使用For Each?
答案 0 :(得分:3)
您正在声明一个5元素数组:Dim strFriends(4) As String
。在Vb.NET中,数字表示数组的最大索引,而不是元素的数量。
但是你只声明了4个元素。所以在foreach块中,最后一个元素是字符串的默认值,即Nothing
,无法将其添加到列表视图(或其他)。
您可以像其他人建议的那样检查阵列上的每个项目是否有效,或者更正您的代码。
试试这个,例如:
strFriends = New String() {"tom", "kate", "bill", "harry"}
你也可以使用List:
Dim strFriends As New List(Of String)()
strFriends.Add("tom")
strFriends.Add("kate")
strFriends.Add("bill")
strFriends.Add("harry")
答案 1 :(得分:2)
或者您可以在添加之前检查每个项目。您也没有填写最后一个元素,这就是异常的原因。
If item IsNot Nothing Then
'add item
End If
答案 2 :(得分:1)
不,每个循环的a不需要try块。使用try-catch进行流量控制是一个错误。相反,测试以确保元素在添加之前不是Nothing。
答案 3 :(得分:1)
试试这个:
If Not String.IsNullOrEmpty(item) Then
' Add item
End If
更新:
您可以检查数组中是否包含任何内容,如下所示:
If strFriends.Length > 0 Then
' Do something with array
End If