О каких организационных исключениях должен знать каждый программист?

Недавно я начал новый проект на С#, и, поскольку я кодировал какое-то исключение в функции, я понял, что не знаю, какое исключение я должен использовать.

Вот общие исключения, которые часто возникают во многих программах:

Существуют ли какие-либо фреймворки, которые вы часто используете в своих программах? Какие исключения должен знать каждый программист .net? Когда вы используете собственное исключение?

РЕДАКТИРОВАТЬ:. Чтобы прояснить тему, исходный вопрос был больше о том, "какое исключение я могу бросить?" чем "какие исключения я должен уловить?".

Ответ 3

Я использую настраиваемое исключение, когда мне приходится поднимать исключение с некоторой логикой, специфичной для логики приложения, а не для фреймворка.

Это означает, что если мой бизнес-уровень получает значение, которое не подходит для выполняемой части выполняемой функции, я создаю собственное исключение. Если пользователь пытается что-то сделать с записью базы данных, которую запрещают мои бизнес-правила, то это также хороший кандидат для настраиваемого исключения.

В основном вы создаете пользовательские исключения, чтобы отличать ваши приложения или бизнес-исключения от регулярных системных исключений. Ваши пользовательские исключения должны по-прежнему вытекать из System.Exception. Преимущество, которое вы получаете от их использования, заключается в том, что вы можете создавать код, который их улавливает и предпринимать определенные действия - вы не можете выполнять конкретные действия, когда у вас есть случайный System.Exception из-за ошибочной логики или ошибок.

Ответ 4

IndexOutOfRangeException

Брошенный при попытке индексирования массив через индекс, который меньше ноль или вне границ массив. -MSDN

Ответ 5

Я уверен, что вы должны знать о каждом встроенном классе исключений. Вы должны знать, какие исключения вы можете бросить, а какие нет. Вы должны понимать, как инфраструктура .net рассматривает встроенное исключение. Вы должны знать, когда вам лучше наследовать существующий класс и определить свой собственный тип. Существует много предопределенных исключений и почти всегда вы можете найти подходящий.

Я бы посоветовал вам прочитать об этом в книге Джеффри Рихтера.

Ответ 6

DivideByZeroException

int SafeDivision(int x, int y)
{
    try
    {
        return (x / y);
    }
    catch (System.DivideByZeroException dbz)
    {
        System.Console.WriteLine("Division by zero attempted!");
        return 0;
    }
}

Ответ 7

OutOfMemoryException

Вам нужно знать, почему возникает такое исключение и почему вы не должны пытаться его обрабатывать.

Ответ 9

ThreadAbortException, из-за странного способа он воскресает себя после каждого блока catch