Zastanawiam się, jakiego rodzaju wyjątku powinienem użyć w przypadku brakujących danych. Na przykład, jeśli węzeł XML nie zawiera danych. Byłoby łatwo "rzucić nowe wyjątki (...)", ale nie jest to zalecane. Inną opcją byłoby utworzenie nowej klasy wyjątków, takiej jak MissingDataException lub InvalidDataException, ale czy nie istnieje wbudowana klasa wyjątków dla tego przypadku?Wyjątek dotyczący brakujących danych
Odpowiedz
Jako regułę należy sprawdzić istniejące wyjątki architektury .NET pod kątem odpowiedniego wyjątku, który należy wykonać przed wyliczeniem własnych. Aby odpowiedzieć bezpośrednio na twoje pytanie, nie ma obecnie żadnego "brakującego" wyjątku do rzucenia, ale to nie znaczy, że nie ma odpowiednich wyjątków, które pozwolą ci objąć twoją sytuację.
W twoim przypadku może być odpowiedni skromny InvalidOperationException
; ten wyjątek jest generowany podczas wywoływania metody na obiekcie, ale stan obiektu nie jest odpowiedni dla operacji. Przykłady obejmują metody wywoływania w zamkniętym strumieniu i moduł wyliczający, który przeszedł koniec kolekcji. Jeśli dane XML są stanem wewnętrznym obiektu, a wywołanie metody wykryło złe dane, dobrym kandydatem jest InvalidOperationException
.
Jeśli przekazujesz dane XML do metody, odpowiednim wyborem może być ArgumentException
lub jedna z jego pochodnych. Istnieje niewielka rodzina tych wyjątków, z których wszystkie wskazują, że argument przekazany do metody nie jest oczekiwany.
Utworzenie niestandardowego wyjątku będzie możliwe tylko wtedy, gdy wyjątkowa okoliczność będzie obsługiwana inaczej niż inne wyjątki. Jeśli zdecydujesz się utworzyć własny wyjątek, upewnij się, że pochodzi on z wyższego wyjątku niż Exception
, tak że charakter wyjątku jest implikowany przez klasę podstawową.
+1 Zgadzam się w 100 procentach, używaj tego, co oferuje system i tylko wtedy, gdy nie możesz znaleźć czegoś, co zadziała, a następnie utwórz niestandardowe wyjątki. –
Możliwym kandydatem będzie również 'ValidationException' –
Można użyć System.Xml.XmlException
.
Edit: Nawet jeśli System.Xml.XmlException
zmieściłoby, myślę, że należy zdefiniować własny wyjątek, ponieważ byłoby to bardziej precyzyjne i można opisać jaki rodzaj danych jest brakujące: id, data, itd
System.Xml.XmlException jest używany przez środowisko wykonawcze do wskazywania błędu podczas odczytu dokumentu XML, szczególnie w przypadku, gdy kod XML ma niepoprawny format (np. Niezamknięty znacznik, brak elementu głównego). Zawiera nawet numery linii i znaków. Nie wydaje mi się szczególnie odpowiedni dla mnie. –
Jeśli jego XML ma dane w węźle, a nie ma żadnego, IMO, kod XML nie ma poprawnego formatu, więc może pokazać, w którym wierszu (nawet ile znaków, jeśli chce). Myślę, że to pasuje, nawet jeśli zdefiniowanie własnego wyjątku byłoby lepsze. –
Nie wywołuj "throw new Exception", ponieważ nie wiesz, jak sobie z tym poradzić.
Zdefiniuj własny wyjątek. Bardziej szczegółowe, takie jak XMLDataMissingException. Następnie możesz dać meameful wiadomość do użytkownika lub zalogować się.
Ustaw wiadomość ze szczegółami. –
wyślij nowy wyjątek ("moja wiadomość"); (lub inny wbudowany wyjątek) jest często właściwym podejściem. Alternatywą jest eksplozja klas Wyjątek, które mogą zostać użyte tylko raz.
Jeśli nowe wyjątki są uzasadnione, powinny zostać utworzone w kontekście domeny, a nie problemu.
Jako ogólną zasadę należy zgłaszać wyjątki w wyjątkowych okolicznościach. Jeśli dane, o których mowa, negatywnie wpływają na stan obiektu lub zachowanie obiektu, należy podać niestandardowy wyjątek. Alternatywne podejście może obejmować jakiś rodzaj sprawdzania poprawności, który uruchamia zdarzenia, które klient obsługuje z wdziękiem, na przykład zgłosić błąd użytkownikowi końcowemu lub wstawić wartości domyślne.
Miałem podobny problem, który opisałeś, w którym miałem 2 klientów (nazywając je & B) odczytywanie i modyfikowanie pojedynczego pliku xml. Klient Usunięty węzeł X, a następnie Klient B podjął próbę zaktualizowania węzła X. Oczywiście aktualizacja węzła, który już nie istnieje, jest problemem. Aby rozwiązać ten problem, zaczerpnąłem inspirację z SQL Server, który zgłasza liczbę wierszy, których dotyczy instrukcja UPDATE.W tym konkretnym przypadku podniosłem zdarzenie UpdateNode w normalny sposób, a szereg wierszy ma wpływ na właściwość ustawioną na zero.
Powinieneś prawdopodobnie zdefiniować, co masz na myśli przez * wyjątek niestandardowy * –
Istnieje również klasa System.Data.ObjectNotFoundException
, którą możesz wziąć pod uwagę.
Ten jest częścią System.Data.Entity.dll i może utworzyć niepotrzebną zależność. – Stijn
@Stijn Sure.To dlatego powiedziałem "możesz rozważyć". –
- 1. Pytania dotyczące brakujących danych
- 2. Jak uzyskać wyjątek dotyczący niedokładnych obliczeń?
- 3. Przewidywanie brakujących wartości danych w bazie danych
- 4. Matplotlib usuń interpolację dla brakujących danych
- 5. Wstawianie wierszy i dodawanie brakujących danych
- 6. Wyjątek dotyczący Androida Amazon S3: "Podany klucz nie istnieje"
- 7. Jak zasymulować wyjątek dotyczący uszkodzonego stanu w .NET 4?
- 8. Wyjątek IOException: wyjątek dotyczący systemu plików został zamknięty podczas działania oozie workflow
- 9. Dodawanie brakujących rzędów
- 10. Czy istnieje odniesienie/zasób dotyczący projektowania struktury pliku danych?
- 11. Samouczek dotyczący statystyki CruiseControl.net
- 12. Samouczek dotyczący kryteriów JPA
- 13. Indeks dotyczący Varcharu?
- 14. Obsługa brakujących kombinacje czynników R
- 15. Jak wykreślić linię brakujących punktów danych w gnuplot
- 16. scalanie ramek danych w celu wyeliminowania brakujących obserwacji
- 17. Wypełnienie brakujących danych przez interpolację w arkuszu kalkulacyjnym Google
- 18. numpy corrcoef - macierz korelacji obliczeniowej podczas ignorowania brakujących danych
- 19. odróżnienia od głównych wartości brakujących danych w działce wykorzystujące R
- 20. Stała szerokość dla geom_bar w przypadku brakujących danych
- 21. XPath dla brakujących węzeł
- 22. Znalezienie brakujących artefaktów Maven
- 23. Baza danych SQLite Zablokowany wyjątek
- 24. R-generuje "zmienną brakujących wartości"
- 25. przykład delegacji dotyczący kontekstu Java
- 26. Komunikat o błędzie dotyczący IEnumerable.GetEnumerator()
- 27. Jak dostosować podpis dotyczący shadowbox.js?
- 28. Wyciek pamięci Golang dotyczący Goroutines
- 29. Dobry samouczek dotyczący protokołu FIX?
- 30. Problem dotyczący typu Scala (wnioskowania)?
Po co wyrzucać wyjątek, gdy można zwrócić wynik funkcji, wskazując, że brakuje niektórych danych? – Lightman