1

アイテムのインデックスを使用して、リスト内のアイテムを文字列と比較しようとしています。ただし、コードは意図したとおりに実行されていません。リスト内の別のアイテムを削除することになっています。

コードは次のとおりです。

If (result.Count = 12) Then
    If (result.item(2) = "US") Then
        result.Remove(7)
    End If
    TextBox8.Text = result(11)
Else
    result.Remove(11)
    TextBox8.Text = ""
End If

結果に基づいて、インデックス (2) には「US」という単語が含まれていますが、何らかの理由で機能しておらず、他の項目を削除していません。助言がありますか?

4

2 に答える 2

1

Dan Puzeyが指摘したように、このRemoveメソッドは指定されたオブジェクトをリストから削除します。したがって、を呼び出すとRemove(7)、リストから7番目の項目が削除されるのではなく、リストから7番目の項目自体が削除されます。あなたが実際にやろうとしているのは、7番目の要素(たまたまどんなオブジェクトでも)を削除することだと思います。その場合は、代わりにを呼び出しますRemoveAt(7)

于 2012-11-28T13:24:49.400 に答える
1

私はあなたのコードを試しました。したがって、エラーがあります:

TextBox8.Text = result(11) 'インデックスが範囲外でした

12 個のアイテム (0 から 11 までのインデックス) があるため、これは論理的です。インデックス番号 7 を削除します。
これで、11 個の項目 (インデックス 0 から 10) ができました。11 から値を取得することはできません。
実際の削除は完璧に機能しています。あなたの問題は何ですか?if の 2 番目の部分:

    Else
        result.Remove(11)
        TextBox8.Text = ""
    End If

result.count <>12の場合にのみ機能します。result.Count = 5の場合、(11)を削除できないため、これにも問題があります。
達成したいこととして伝えたほうがいいかもしれません。

***追伸。あなたのリストは次のようなものだと思いました:

    Dim result As New List(Of String)
    For i = 0 To 11
        result.Insert(i, i.ToString)
    Next
    result(2) = "US"
于 2012-11-28T12:42:31.843 に答える