programowanieProgramista VB.NET

Jak działa dostęp do elementów kolekcji typu List(Of T) w Visual Basic, jakie operacje są dostępne i w jakich przypadkach występują błędy przy dostępie po indeksie?

Zdaj rozmowy kwalifikacyjne z asystentem AI Hintsage

Odpowiedź.

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:

  • Dynamiczny rozmiar, automatyczne redistribucja pamięci
  • Szybki dostęp indeksowany O(1)
  • Bezpieczeństwo typów (błędy typów są eliminowane w czasie kompilacji)

Pytania z pułapką.

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.

Typowe błędy i antywzorze

  • Uzyskiwanie dostępu do nieistniejącego indeksu
  • Usuwanie/dodawanie elementów w For Each
  • Brak sprawdzenia pustki przed uzyskaniem dostępu

Przykład z życia

Negatywny przypadek

W programie iterują List(Of T) za pomocą For Each i wewnątrz iteracji usuwają elementy.

Zalety:

  • Łatwość pisania

Wady:

  • Program zakończy się awaryjnie z InvalidOperationException, dane nie zostaną przetworzone

Pozytywny przypadek

Kod iteruje elementy od końca do początku za pomocą For i usuwa odpowiednie obiekty.

Zalety:

  • Brak wyjątków, wszystko jest usuwane poprawnie

Wady:

  • Trochę trudniejsza czytelność pętli