1

我有这个简单的代码:

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?

4

4 回答 4

3

您正在声明一个 5 元素数组:Dim strFriends(4) As String. 在 Vb.NET 中,数字表示数组的最大索引,而不是元素的数量。

但是您只声明了 4 个元素。因此,在 foreach 块中,最后一个元素是字符串的默认值,即Nothing无法将其添加到列表视图(或其他任何内容)。

您可以像其他人建议的那样检查数组中的每个项目是否有效,或者更正您的代码。

试试这个,例如:

strFriends = New String() {"tom", "kate", "bill", "harry"}

您也可以使用列表:

Dim strFriends As New List(Of String)()

strFriends.Add("tom")
strFriends.Add("kate")
strFriends.Add("bill")
strFriends.Add("harry")
于 2013-08-16T05:25:29.017 回答
2

或者您可以在添加之前检查每个项目。您也没有填充最后一个元素,这就是异常的原因。

If item IsNot Nothing Then
   'add item
End If
于 2013-08-16T04:29:35.557 回答
1

不,for each 循环不需要 try 块。使用 try-catch 进行流量控制是一个错误。相反,在添加元素之前进行测试以确保元素不是 Nothing。

于 2013-08-16T04:36:57.853 回答
1

尝试这个:

If Not String.IsNullOrEmpty(item) Then
    ' Add item
End If

更新:

您可以检查数组中是否有任何内容,如下所示:

If strFriends.Length > 0 Then
    ' Do something with array
End If
于 2013-08-16T04:46:47.837 回答