2010-11-01 4 views
-5
try 
{ 
    some code 
} 
catch() 
{ 
    some code 
} 
finally 
{ 
    some code 
} 

try 
{ 
    some code 
} 
catch() 
{ 
    some code 
} 
finally 
{ 
    some code 
} 

Я знаю, что если исключение выбрано в первом блоке try, тогда будет выполнен первый блок finally. А как же второй блок?Какой код выполняется, если генерируется исключение?

Кроме того, если вы хотите отобразить сообщение пользователю, когда возникает исключение, то где вы должны написать это сообщение и как его отображать?

FYI, я недавно задал эти вопросы в интервью и был в тупике.

+4

-1: Если вы хотите, чтобы мы нашли время, чтобы ответить на ваш вопрос, найдите время, чтобы собрать согласованный вопрос. – Thanatos

+0

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

+1

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

ответ

6

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

try 
{ 
    Console.WriteLine("try1"); 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
catch(ArgumentNullException e1) 
{ 
    Console.WriteLine("catch1"); 
    Console.WriteLine(e1.ToString()); 
    // throw; 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
catch(Exception e1a) 
{ 
    Console.WriteLine("catch1a"); 
    Console.WriteLine(e1a.ToString()); 
    // throw; 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
finally 
{ 
    Console.WriteLine("finally1"); 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 

try 
{ 
    Console.WriteLine("try2"); 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
catch(ArgumentNullException e2) 
{ 
    Console.WriteLine("catch2"); 
    Console.WriteLine(e2.ToString()); 
    // throw; 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
catch(Exception e2a) 
{ 
    Console.WriteLine("catch2a"); 
    Console.WriteLine(e2a.ToString()); 
    // throw; 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
finally 
{ 
    Console.WriteLine("finally2"); 
    // throw new ArgumentNullException(); 
    // Console.WriteLine(((string)null).Length); // Will also throw exception 
} 
2

В коде, который вы написали, поскольку они представляют собой два разных блока try (то есть один не содержится в другом.) Они оба будут пытаться, а второй после первого блока finally. Второй блок finally также будет запущен.

Вторая ситуация зависит от ситуации, как правило, вы хотите как можно больше исключить свои исключения от пользователя. Вы хотите, чтобы ваша программа была дворецкой, спокойной, с дороги, но там, когда вам это нужно. Если бы это был я, я бы, вероятно, спокойно зарегистрировал проблему, а затем продолжил бы самую разумную манеру, если бы это не было большой проблемой, и вам нужно уведомить пользователя, например: «Мой ftp-клиент не может найти сеть подключение «. Если это так, и вы находитесь на C#, то я бы предложил взглянуть на эту страницу: http://msdn.microsoft.com/en-us/library/system.windows.forms.messagebox.aspx

+0

вы хотите сказать, что если исключение приходит в первую попытку, тогда все же первый и, наконец, блок и другой блок finally, соответствующий блоку catch try secon, будут выполняться тоже. Сообщите мне ... также я хочу знать, если правильно ли отображать какое-то сообщение пользователю, которому было задано точное исключение в соответствующем блоке catch, пожалуйста, сообщите мне об этом ...Я также использую logger LOG4Net, но я хочу отобразить соответствующее сообщение в каком-то исключении, где shud я отображаю его – NoviceToDotNet

+0

класс окна сообщений для приложения Windows, но как o отображать в веб-приложениях – NoviceToDotNet

+0

вы имеете в виду, что если исключение приходит в первую очередь, блок то сначала будет выполняться первый блок try, а также второй, но как второй соответствует второму блоку try – NoviceToDotNet

1

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

try 
{ 
    some code1 //always executes this, on exception goto code2 
} 
catch() 
{ 
    some code2 //if exception was caught do this, if exception occurs in this code program blows up 
} 
finally 
{ 
    some code3 //always executes this, if exception happens here, program blows up 
} 




try 
{ 
    some code4 //if program has not blown up at this point, execute this. on exception goto code 5 
} 
catch() 
{ 
    some code5 // if exception was caught do this. if exception occurs in this code, program blows up. 
} 
finally 
{ 
    some code6 //if program has not blown up by now, always do this. 
} 

пути общего кода будет: 1-3-4-6 за каких-либо исключений нашли и 1-2-3-4-5-6, если исключение произошло в 1 другие (ваша обработка ошибок нарушена)

Смежные вопросы