2011-04-20 10 views
7

En una entrevista, el entrevistador le preguntó a mi .. que que tienen un código que escribe en el lado del bloque try y la captura comobloque catch error no requerían

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 
} 

supongamos que tenemos un error en el código de línea 3 entonces esto no va a ir en el bloque catch pero si ha obtenido un error en cualquier otra línea, excepto la línea 3 que ir en bloque catch

es esto posible que si se producen errores en una línea determinada, entonces no se vaya en el bloque de captura?

+2

Desenchufe el cable de alimentación de su computadora en el momento en que se ejecuta la línea 3 :) – Jan

+0

Las excepciones OOM y SO son difíciles (¿imposibles?) De atrapar. –

+0

¿Cuál fue la pregunta real de la entrevista? ¿Cómo hacer para que la línea 3 no haga que se ingrese el bloque catch, o dado ese código, qué cosa podría estar haciendo la línea 3 para evitar que la captura atrape algo? –

Respuesta

3

Usted puede envolver la línea 3 en otro bloque try/catch:

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; 
} 

también el entrevistador debe haber definido de error. Se habla de una excepción como un errorpodría significar muchas cosas => código de basura, excepción, no se comporta como se esperaba código, ...

+0

Eliminé mi respuesta. 'ThreadAbortException' puede capturarse pero se levanta de nuevo al final del bloque catch. – Aliostad

+0

¿Alguna razón para el voto a favor? Por favor, deje un comentario cuando downvoting. –

+1

No voté, por lo que no hay confusión aquí. pero de todos modos quería comentar sobre tu pregunta. Su ans aún no aclara por qué no atrapó la excepción. su solución no funcionará si es catch() con parámetro. – Priyank

3

Si la línea 3 causas non CLS-compliant exceptions, no será catch'ed con bloque catch() parametrizado. Para detectar todo tipo de excepciones, use bloque de captura sin parámetros.

try 
{ 
// Statement which causes an exception 
} 

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

.net Exception catch block

0

Respuesta corta: Sí

Hay errores que un bloque catch no van a recibir. Creo que no hay memoria. Otra forma en que una excepción puede omitir un bloque es si el error arrojado no es uno de los que usted definió.

Cuestiones relacionadas