在Visual Basic 2012中使用没有try-catch的每个循环

时间:2013-08-16 04:26:50

标签: vb.net

我有这个简单的代码:

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 个答案:

答案 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