2011-04-20 12 views
7

w wywiadzie, Dziennikarz zapytał mnie .. że Mam kod, który napisany w boku try i catch bloku jakOn Error bloku catch nie zadzwonił

try 
{ 
//code line 1 
//code line 2 
//code line3 -- if error occur on this line then did not go in the catch block 
//code line 4 
//code line 5 
} 
catch() 
{ 
    throw 
} 

załóżmy, że masz błąd w kodzie linia 3 to nie przejdzie w bloku catch , ale jeśli dostałem błąd w każdej innej linii z wyjątkiem linii 3, to w bloku catch

jest to możliwe, że jeśli błąd wystąpi w konkretnej linii, to nie jest w bloku catch?

+2

Odłącz zasilanie od komputera w momencie wykonania wiersza 3 :) – Jan

+0

Wyjątki OOM i SO są trudne (niemożliwe?) Do złapania. –

+0

Jakie było rzeczywiste pytanie dotyczące wywiadu? Jak zrobić to tak, aby linia 3 nie powodowała, że ​​blok catch został wprowadzony, czy też dany kod, co mogłaby zrobić linia 3, która uniemożliwiłaby złapanie czegokolwiek? –

Odpowiedz

3

Można owinąć linii 3 w innym try/catch bloku:

try 
{ 
    //code line 1 
    //code line 2 
    try 
    { 
     //code line3 -- if error occur on this line then did not go in the catch block 
    } 
    catch { } 
    //code line 4 
    //code line 5 
} 
catch() 
{ 
    throw; 
} 

Również wywiad musi mieć zdefiniowane błąd. Mówił o wyjątek jako błądmoże oznaczać wiele rzeczy => Kod brzydko, wyjątek, nie zachowuje się zgodnie z oczekiwaniami kodu ...

+0

Usunąłem odpowiedź. 'ThreadAbortException' może zostać przechwycony, ale jest ponownie podnoszony na końcu bloku catch. – Aliostad

+0

Jaki jest powód przyjęcia sprawy? Proszę zostawić komentarz podczas rezygnacji. –

+1

Nie głosowałem, więc nie ma zamieszania. ale mimo to chciałem skomentować twoje ans. Twój ans nadal nie wyjaśnia, dlaczego nie przechwycił wyjątku. twoje rozwiązanie sitll nie zadziała, jeśli jest catch() z parametrem. – Priyank

3

Jeśli linia 3 przyczyny non CLS-compliant exceptions, to nie będzie z catch'ed sparametryzowany blok catch(). Aby uchwycić wszystkie typy wyjątków, użyj bloku blokującego parametry.

try 
{ 
// Statement which causes an exception 
} 

catch //No parameters 
{ 
//Handles any type of exception 
} 

.net Exception catch block

0

Krótka odpowiedź: Tak

Są błędy, które blok catch nie dostanie. Myślę, że z błędu pamięci. Innym sposobem, w jaki wyjątek może pominąć blok, jest to, czy zgłoszony błąd nie jest jednym z tych, które zdefiniowałeś.

Powiązane problemy