W Visual Basic operator Nothing jest używany do zerowania odniesienia do obiektu, co oznacza, że zmienna nie wskazuje na żaden egzemplarz obiektu. Ważne jest, aby poprawnie sprawdzać zmienne obiektowe na Nothing, aby zapobiec błędom w czasie wykonywania.
Historia pytania:
Nothing pojawił się w Visual Basic, aby ułatwić inicjalizację zmiennych obiektowych w stanie 'bez obiektu'. Ułatwia to sprawdzanie na pustkę i zapobiega błędom podczas odwoływania się do niezadeklarowanego obiektu.
Problem:
Niepoprawne sprawdzanie lub mylenie Nothing z pustym/zainicjowanym obiektem może prowadzić do błędów, takich jak NullReferenceException.
Rozwiązanie:
Przed użyciem zmiennych obiektowych ZAWSZE sprawdzaj je na Nothing. Nie myl "pustego" (zainicjowanego, ale nie wypełnionego) obiektu z Nothing.
Przykład poprawnego sprawdzenia obiektu:
Dim customers As List(Of String) = Nothing ' Próba odwołania spowoduje błąd ' customers.Add("Test") If customers Is Nothing Then customers = New List(Of String)() End If customers.Add("Test")
Kluczowe cechy:
Czy można porównywać obiekty za pomocą = Nothing?
Odpowiedź: Nie, dla typów referencyjnych porównanie z Nothing wykonuje się tylko przy użyciu operatora Is, inaczej wynik może być niepoprawny lub wyświetli się ostrzeżenie kompilatora.
If obj Is Nothing Then ... ' Poprawnie If obj = Nothing Then ... ' Niepoprawnie dla obiektów
Co się stanie, gdy odwołasz się do metody lub właściwości obiektu równego Nothing?
Odpowiedź: Zostanie rzucone wyjątek NullReferenceException. Sprawdzenie na Nothing należy wykonać przed dostępem do członków obiektu.
Jak odróżnić Nothing od pustej kolekcji (np. New List(Of T))?
Odpowiedź: Nothing to odniesienie do braku obiektu, a New List(Of T) to obiekt kolekcji, który może mieć 0 elementów, ale sama kolekcja istnieje. Sprawdzanie na Nothing i sprawdzanie Count = 0 to różne rzeczy.
W aplikacji zapomniano zainicjować odniesienie do kolekcji przed użyciem, próbowano dodać element: wystąpił NullReferenceException i aplikacja zakończyła się awarią.
Zalety: Szybko zadeklarowana zmienna
Wady: Błąd w czasie działania, zły doświadczenie użytkownika
Przed użyciem kolekcji lub obiektu zawsze następuje sprawdzenie na Nothing i w razie potrzeby inicjalizacja.
Zalety: Wyeliminowane błędy, niezawodna praca programu
Wady: Wymaga nieco więcej kodu i dyscypliny