Быть конкретным с Try/Catch

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

Я изучаю тему, и я не совсем понимаю синтаксис, например.

catch (InvalidCastException e) 
 {
 }

Я понимаю, что InvalidCastException - это тип обрабатываемой ошибки, однако я не уверен, что такое e.

Может кто-нибудь объяснить это?

Ответ 1

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

Например, NotFiniteNumberException определяет дополнительное свойство с именем OffendingNumber, которое отсутствует в обычном объекте Exception... Затем он предоставляет дополнительные данные, которые могут потребоваться, чтобы выяснить, что именно произошло.

Ответ 2

Предположим, что не было e. Как вы получите сообщение об исключении?

Имя e (или любое другое имя) позволяет вам получить дескриптор объекта исключения, чтобы вы могли извлечь из него информацию.

Это юридический синтаксис, чтобы не выдавать никакого имени:

catch (InvalidCastException) //legal C#

Это работает, но вы не можете ничего знать об ошибке, кроме ее типа.

Ответ 3

"e" - это то, что вы решили назвать исключением. точно так же, как вы бы делали

string name = "...";

или

int total = 8;

где string и int в этом примере являются типами данных (в вашем случае тип данных InvalidCastException), тогда как "name" и "total" - это имена переменных, которые в вашем случае просто "e".

Ответ 4

'e' - это просто имя переменной, вы можете назвать его 'ex' или 'exception', если вам будет легче читать. Но 'e' - это просто соглашение, подобное "i" в конструкции for i = 0...

Ответ 5

e - это переменная, в которую помещается экземпляр InvalidCastException. Затем вы можете просмотреть свойства этого объекта, чтобы помочь вам точно понять, что вызвало ошибку, вызванную кодом в блоке try.

Ответ 6

"InvalidCastException" - это тип, e - объект этого типа. с объектом вы можете вызывать функции-члены на нем. например

catch (InvalidCastException e) {
    ...
    e.printErrorMessage();
    ... 
}

Ответ 7

e - ссылка на объект исключения, в котором хранятся сведения об исключении, которое было обнаружено. Подробности могут включать исключение Message, объект InnerException и т.д.

Ответ 8

e - это имя переменной. Это может быть все, что вы хотели бы назвать, например exception.

Ответ 9

e - это переменная, которая содержит исключение, поэтому теперь вы можете делать такие вещи, как e.message и такие

Ответ 10

e - это экземпляр типа InvalidCastException. В блоке catch вы можете, например, сказать Debug.Write(e.ToString()).