Я бы сказал, что лучше не выбрасывать Exception
объекты, потому что они слишком общие. Есть много классов, которые наследуются от Exception
внутри фреймворка, обычно это тот, который соответствует сценарию, в котором вы находитесь. Если нет, тогда расширьте Exception
своим собственным классом.
Например, если вы проверяете параметры, входящие в метод, и обнаруживаете, что один из них равен нулю, а это не так, бросьте ArgumentNullException
. Если две вещи пытаются быть выполнены не по порядку, бросьте InvalidOperationException
. Вы можете поймать эти исключения индивидуально:
try
{
}
catch (ArgumentNullException argException)
{
}
catch (InvalidOperationException opException)
{
}
Возможно, вы даже сочтете этот подход слишком общим, но я бы сказал, что компоненту высокого уровня (например, пользовательскому интерфейсу) на самом деле не нужно знать точные детали того, что пошло не так, просто что-то пошло не так. Например, если что-то пойдет не так с командой базы данных, вы можете получить SqlException
. Вы можете поймать это, записать некоторые детали, а затем выдать более общее исключение.