ExceptionNa początku tworzenia wpisu miałem duży zapał ,ale gdy doszedłem do litery ”R” w wyjątkach z przestrzeni nazw System.SystemException to stwierdziłem , że zrobienie tej listy na pewno zajmie mi więcej niż jeden dzień.

Dla usprawnienia pracy podzieliłem wpis na części, ponieważ nie byłem w stanie  zbadać nawet tych wyjątków do litery R.

Mimo to myślę ,że będziesz zadowolony z mojej pracy. Na początku chciałem zrobić jedną wielką tabelkę ,ale byłaby ona nieczytelna i trudno by  było na niej zaznaczyć dziedziczenie, więc pomysł ten porzuciłem.

Celem tego wpisu nie jest nauczenie się wszystkich wyjątków na pamięć ,ale po prostu uświadomienie sobie ,że one istnieją.

Chociaż warto zapamiętać parę z nich.Puszczam oczko

Lista Wyjątków ArgumentException

Jednym z najczęściej spotykanych wyjątków jest ArgumentException. Tyle razy podawałem  niewłaściwy argument do danej  metody ,że go zapamiętałem.

Rodzina wyjątków ArgumentException  zawiera w sobie też inne przypadki niż błędny argument do metody X.

Przeglądając tę rodzinę zaciekawił mnie wyjątek InvalidEnumArgumentException. Szczerze mówiąc nawet nie wiedziałem ,że da się umieścić błędną wartość do typu wyliczeniowego. Przykład z MSDN jednak wykazał coś innego. Można umieścić błędną wartość poprzez błędne rzutowanie tylko po co to robić.
.Przykład InvalidEnumArgumentException

Oto wyjątki pochodzące z Argument Exception i jego synowie. ChłopiecChłopiec

WyjątekOpis
ArgumentExceptionPróba podania niewłaściwego argumentu dla danej metody.
ArgumentNullExceptionPróba podania pustej referencji dla danej metody.
ArgumentOutOfRangeExceptionPróba podania do metody za dużej bądź za małej wartości. Wartości wychodzącej poza zakres.
InvalidAsynchronousStateExceptionWątek, który chcesz użyć już nie istnieje.
DuplicateWaitObjectExceptionKiedy obiekt pojawia się więcej niż raz w tabeli synchronizującej. Związany z WaitHandle.
CultureNotFoundExceptionPróba dostępu do danej kultury, która nie istnieje bądź nie istnieje dla danej maszyny.
ReservationNotFoundExceptionZwiązany z logami operacjami IO. Gdy nie ma przestrzeni dla LogRecordSequence wyskakuje ten wyjątek.
DecoderFallbackExceptionOperacja dekodowania pliku zawiodła.
EncoderFallbackExceptionOperacja kodowania pliku zawiodła.

 

Lista Wyjątków ArithmeticException

Wyjątki, tym razem arytmetyczne związane są z klasą ArithmeticException i jego pochodnymi klasami.
Ogólnie trochę zdziwił mnie wyjątek NotFiniteNumberExceptionprzecież liczby double obsługują nieskończoność więc o co kaman ,czyżby wyjątek odnosił się do platformy.NET ,ale do innego języka niż C#. Zrobiłem małe badania w tej sprawie.

NotFiniteNumberException is available for programming languages that do not support the concepts of infinity and Not-a-Number in floating-point operations.

W dokumentacji można przeczytać następujące zdanie, które potwierdziło moją tezę.

WyjątekOpis
ArithmeticExceptionBłąd pojawiający się przy niewłaściwych operacjach arytmetycznych ,rzutowaniu i przy konwersji.
DivideByZeroExceptionDzielnie przez zero dla liczby całkowitej. Dla double i float wyjdzie nieskończoność ,a przy dzieleniu 0/0 NaN.
NotFiniteNumberExceptionGdy dana wartość typu float ma nieobsłużoną wartość nieskończoną i NaN. C# nie wyrzuci tego wyjątku ,ponieważ on obsługuje te wartości.
OverflowExceptionPrzekroczenie zakresu wartościowej np. dla typu int , jeśli nie stosujemy słowa kluczowego unchecked.

 

ADO.NET

W System.Exception oczywiście nie zabrakło wyjątków z ADO.NET. Zaznaczyłem na żółto wyjątki, z którymi spotkałem się używając klas DataSet.

WyjątekOpis
DataExceptionWyjątek pojawiający się przy niewłaściwej operacji baz danych przy użyciu komponentów z ADO.NET. Kolejny wyjątek, który ma naprawdę dużą rodzinę
DeletedRowInaccessibleExceptionPróba wykonania akcji na DataRow, który został już skasowany.
TypedDataSetGeneratorExceptionWystępuje konflikt nazw przy generowaniu DataSet
DuplicateNameExceptionPróba dodania nowej bazy,tabeli,kolumny,relacji pod nazwą, która już istnieje.
InRowChangingEventExceptionPróba wywołania metody EndEdit wewnątrz wydarzenia RowChanging.
InvalidConstraintExceptionNiewłaściwa próba utworzenia bądź uzyskania dostępu do relacji.
InvalidExpressionExceptionPróba dodania kolumny poprzez błędne wyrażenie w kolekcji kolumn.
MissingPrimaryKeyExceptionPróba dostępu do wierszy w tabeli w pewien określony sposób (DataRowCollection.Contains,DataRowCollection.Find), która nie ma klucza indeksującego .
NoNullAllowedExceptionPróba dodania pustego rekordu do kolumny gdzie pole nie może być puste.
ObjectNotFoundExceptionObiekt nie ma reprezentacji w bazie.
ReadOnlyExceptionPróba zmiany pola, w którym kolumna jest tylko do odczytu.
RowNotInTableExceptionPróba dokonania operacji na DataRow, którego nie ma w tabeli (DataTable). Tak pamiętam ten wyjątek.Uśmiech
StrongTypingExceptionGdy użytkownik ma dostęp do wartości DBNull w silny typowany DataSet
TypedDataSetGeneratorExceptionPrzy tworzeniu silnego typowanego DataSet wystąpił konflikt nazw.
UpdateExceptionWyjątek zostanie rzucony przy próbie modyfikacji obiektu, który nie może być rzutowany na źródło danych.
VersionNotFoundExceptionPróba zwrócenia innej wersji DataRow do bazy, jednak on już został skasowany.


W wyjątku DataException naturalnie zawiera się też wyjątek EnityException ,a w nim wyjątki obsługujące ADO.NET Entity Framework.

WyjątekOpis
EntityExceptionOgólny wyjątek wyrzucony przez ADO.NET Entity Framework.
EntityCommandExecutionExceptionDane polecenie mogło zostać wykonane
EntitySqlExceptionZapytanie SQL zostało źle napisane.
MappingExceptionUsługa mapująca przestała działać.
MetadataExceptionMetadane zgłaszają wyjątek.
ProviderIncompatibleExceptionSystem bazy danych jest niekompatybilny z Entity Framework

 

Format Exception

FormatException to kolejny często spotykany wyjątek wynikający choćby z konwersji napisów liczbowych na typy liczbowe.

W czasie czytania dokumentacji MSDN coś przyszło mi do głowy, czy przypadkiem FormatException i ArgumentException nie robią tego samego ,a jeśli tak to dlaczego nie dziedziczą po sobie.

FormatException is thrown when the format of an argument in a method invocation does not match the format of the corresponding formal parameter type. For example, if a method specifies a String parameter consisting of two digits with an embedded period, passing a corresponding string argument containing only two digits to that method would cause FormatException to be thrown.

Akurat artykuł na MSDN na temat FormatExceptionmoże sprawiać takie wrażenie ,ale te dwa wyjątki się różnią jak dzień i noc.

FormatException zaznacza ,że problem nie wystąpił z powodu niezgodności typu, bo w końcu dla metody int.Parse() podajemy string więc problem z tym napisem tkwi w jego formacie, który nie jest liczbowym.

Dla lepszego przykładu mogę podać strumień dla metody , BinaryReader.Read7BitEncodedIn .Jeśli strumień nie jest  kodowany w 7 bitowym stylu wyrzuci mi wyjątek FormatException.

Przy okazji ten wyjątek też mógłby być obsłużony przez jego pochodnego kolegę FileFormatException ,ale nie jestem tego pewien ,ale istniałby sens dziedziczenia wyjątków.

To co mam na myśli to, to ,że klasy pochodne od danego wyjątku są bardziej dostosowane do konkretnych sytuacji (przykład: WyjątekZłyFormatPliku) ,ale wciąż wynikają one z klasy bazowej (“WyjątekZłyFormat”) .

FormatException i jego klasy pochodne.

WyjątekOpis
FormatExceptionWyjątek pojawia się, gdy format argumentów nie jest zgodny z z jakiej specyfikacją potrzebuje dana metoda. Przykładem jest próba konwersji z string na int ,za pomocą int.Parse(), gdy użytkownik podał wartość nieliczbową.
FileFormatExceptionGdy format plików nie jest zgodny z naszymi założeniami.
CookieExceptionBłąd pojawiający się przy umieszczeniu ciasteczka w CookieContainer.
CustomAttributeFormatExceptionWyjątek pojawiający się przy niewłaściwym użyciu własnych atrybutów. Związany z System.Reflection
UriFormatExceptionZły format Uri.

 

IO Exception

IOException , który zaznacza błędne operacje IO i jego klasy pochodne, które  dostosowane są do konkretnych sytuacji. Myślę , że  opis ich w tabelce jest wystarczający.

WyjątekOpis
IOExceptionBłędne użyte operacje I/O.
DirectoryNotFoundExceptionFolder nie został znaleziony.
DriveNotFoundExceptionDany dysk nie został znaleziony.
EndOfStreamExceptionPróba dalszego odczytania pliku pomimo zakończenia strumienia.
FileLoadExceptionPlik istnieje jednak nie może być odczytany. Ponieważ mamy do dyspozycji “SecurityException” nieodczytanie tego pliku nie może wynikać z wymogów bezpieczeństwa.
FileNotFoundExceptionPlik nie może zostać znaleziony.
PathTooLongExceptionŚcieżka jest dłuższa niż to system przewiduje, Zwykle jest do 260 znaków.
PipeExceptionWyjątek pojawia się przy danym “pipe”