2012-12-28 2 views
10

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

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

catch (InvalidCastException e) 
{ 
} 

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

Не могли бы вы объяснить это?

+2

Просто установите точку останова внутри этого блока catch и посмотрите на 'e' в отладчике! –

+1

Лучше взгляните на класс исключения MSDN - http://msdn.microsoft.com/en-us/library/system.exception%28v=vs.71%29.aspx – MethodMan

+5

Хотя этот вопрос не показывает целую * лот * исследовательских усилий, это * очень ясный и полезный вопрос для многих людей, поэтому я бы рекомендовал не спускать вниз. – Adam

ответ

16

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

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

2

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

5

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

6

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

string name = "..."; 

или

int total = 8; 

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

3

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

2

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

19

Пусть не было e. Как вы получите сообщение об исключении?

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

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

catch (InvalidCastException) //legal C# 

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

+5

+1 для приятного объяснения –

+0

Ничего себе, я не знал, что вы можете объявить улов без переменной ... Я сразу же начну забивать свой код этим. :-п –

4

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

2

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

4

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

catch (InvalidCastException e) { 
    ... 
    e.printErrorMessage(); 
    ... 
} 
Смежные вопросы