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.ArgumentNullExceptionFor Each を使用するために try catch ブロックを使用することは必須ですか?

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

これを試して:

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 に答える
1

いいえ、for each ループには try ブロックは必要ありません。フロー制御に try-catch を使用するのはバグです。代わりに、要素を追加する前に要素が Nothing でないことを確認するためにテストします。

于 2013-08-16T04:36:57.853 に答える