Exception Na 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ątek Opis
ArgumentException Próba podania niewłaściwego argumentu dla danej metody.
ArgumentNullException Próba podania pustej referencji dla danej metody.
ArgumentOutOfRangeException Próba podania do metody za dużej bądź za małej wartości. Wartości wychodzącej poza zakres.
InvalidAsynchronousStateException Wątek, który chcesz użyć już nie istnieje.
DuplicateWaitObjectException Kiedy obiekt pojawia się więcej niż raz w tabeli synchronizującej. Związany z WaitHandle.
CultureNotFoundException Próba dostępu do danej kultury, która nie istnieje bądź nie istnieje dla danej maszyny.
ReservationNotFoundException Związany z logami operacjami IO. Gdy nie ma przestrzeni dla LogRecordSequence wyskakuje ten wyjątek.
DecoderFallbackException Operacja dekodowania pliku zawiodła.
EncoderFallbackException Operacja 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ątek Opis
ArithmeticException Błąd pojawiający się przy niewłaściwych operacjach arytmetycznych ,rzutowaniu i przy konwersji.
DivideByZeroException Dzielnie przez zero dla liczby całkowitej. Dla double i float wyjdzie nieskończoność ,a przy dzieleniu 0/0 NaN.
NotFiniteNumberException Gdy 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.
OverflowException Przekroczenie 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ątek Opis
DataException Wyją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ę
DeletedRowInaccessibleException Próba wykonania akcji na DataRow, który został już skasowany.
TypedDataSetGeneratorException Występuje konflikt nazw przy generowaniu DataSet
DuplicateNameException Próba dodania nowej bazy,tabeli,kolumny,relacji pod nazwą, która już istnieje.
InRowChangingEventException Próba wywołania metody EndEdit wewnątrz wydarzenia RowChanging.
InvalidConstraintException Niewłaściwa próba utworzenia bądź uzyskania dostępu do relacji.
InvalidExpressionException Próba dodania kolumny poprzez błędne wyrażenie w kolekcji kolumn.
MissingPrimaryKeyException Próba dostępu do wierszy w tabeli w pewien określony sposób (DataRowCollection.Contains,DataRowCollection.Find), która nie ma klucza indeksującego .
NoNullAllowedException Próba dodania pustego rekordu do kolumny gdzie pole nie może być puste.
ObjectNotFoundException Obiekt nie ma reprezentacji w bazie.
ReadOnlyException Próba zmiany pola, w którym kolumna jest tylko do odczytu.
RowNotInTableException Próba dokonania operacji na DataRow, którego nie ma w tabeli (DataTable). Tak pamiętam ten wyjątek.Uśmiech
StrongTypingException Gdy użytkownik ma dostęp do wartości DBNull w silny typowany DataSet
TypedDataSetGeneratorException Przy tworzeniu silnego typowanego DataSet wystąpił konflikt nazw.
UpdateException Wyjątek zostanie rzucony przy próbie modyfikacji obiektu, który nie może być rzutowany na źródło danych.
VersionNotFoundException Pró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ątek Opis
EntityException Ogólny wyjątek wyrzucony przez ADO.NET Entity Framework.
EntityCommandExecutionException Dane polecenie mogło zostać wykonane
EntitySqlException Zapytanie SQL zostało źle napisane.
MappingException Usługa mapująca przestała działać.
MetadataException Metadane zgłaszają wyjątek.
ProviderIncompatibleException System 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ątek Opis
FormatException Wyją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ą.
FileFormatException Gdy format plików nie jest zgodny z naszymi założeniami.
CookieException Błąd pojawiający się przy umieszczeniu ciasteczka w CookieContainer.
CustomAttributeFormatException Wyjątek pojawiający się przy niewłaściwym użyciu własnych atrybutów. Związany z System.Reflection
UriFormatException Zł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ątek Opis
IOException Błędne użyte operacje I/O.
DirectoryNotFoundException Folder nie został znaleziony.
DriveNotFoundException Dany dysk nie został znaleziony.
EndOfStreamException Próba dalszego odczytania pliku pomimo zakończenia strumienia.
FileLoadException Plik istnieje jednak nie może być odczytany. Ponieważ mamy do dyspozycji “SecurityException” nieodczytanie tego pliku nie może wynikać z wymogów bezpieczeństwa.
FileNotFoundException Plik nie może zostać znaleziony.
PathTooLongException Ścieżka jest dłuższa niż to system przewiduje, Zwykle jest do 260 znaków.
PipeException Wyjątek pojawia się przy danym “pipe”