Historia pytania
Kolekcja List(Of T) została wprowadzona w VB.NET w celu zastąpienia przestarzałych kolekcji, zapewniając bezpieczeństwo typów, dynamiczną zmianę rozmiaru i szybki dostęp do elementów po indeksie. Użycie listy pozwala na strukturalizowanie danych, pracę z typowanymi elementami i unikanie powszechnych błędów związanych z nieogólnymi kolekcjami.
Problem
Początkujący często nie rozumieją, jak poprawnie uzyskiwać dostęp do elementów listy, jak dodawać, zmieniać i usuwać elementy oraz co się stanie w przypadku błędnego użycia indeksów (na przykład, wychodząc poza granice listy). Prowadzi to do wyjątków podczas działania programu.
Rozwiązanie
W List(Of T) elementy są indeksowane od zera. Dostęp do elementu odbywa się po indeksie zarówno do odczytu, jak i zapisu. Jeśli indeks jest niedozwolony, występuje wyjątek ArgumentOutOfRangeException. Metody kolekcji pozwalają na bezpieczną pracę z elementami:
Przykład kodu:
Imports System.Collections.Generic Dim numbers As New List(Of Integer)() numbers.Add(10) numbers.Add(20) Dim first As Integer = numbers(0) ' Pobierz element o indeksie 0 numbers(1) = 99 ' Ustaw element o indeksie 1 ' Usuwanie numbers.RemoveAt(0) ' Usuń po indeksie
Kluczowe cechy:
Czy uzyskanie dostępu do indeksu, który jest równy liczbie elementów w List(Of T), da nam ostatni element?
Nie. Indeksacja zaczyna się od 0, a maksymalny dozwolony indeks to (Count - 1). Uzyskując dostęp do indeksu równego Count, wystąpi błąd ArgumentOutOfRangeException.
Czy można dodać element do środka List(Of T) bez usuwania istniejących danych?
Tak, za pomocą metody Insert:
numbers.Insert(1, 42) ' Wstawi 42 na drugą pozycję, przesuwając pozostałe w prawo.
Czy zmiana kolekcji List(Of T) podczas iteracji za pomocą For Each jest niebezpieczna?
Tak, to prowadzi do InvalidOperationException. Do takich operacji używaj pętli For z indeksem lub najpierw stwórz listę do usunięcia.
W programie iterują List(Of T) za pomocą For Each i wewnątrz iteracji usuwają elementy.
Zalety:
Wady:
Kod iteruje elementy od końca do początku za pomocą For i usuwa odpowiednie obiekty.
Zalety:
Wady: