2011-01-06 19 views
6

Solo asegurándome de que lo entiendo bien. ¿Es correcto el esquema correcto? Capturando las excepciones más específicas primero para capturar excepciones más amplias con captura general al final del conjunto de bloques de captura.¿Es importante el orden de los bloqueos de captura?

try 
{ 
some code 
} 


catch(SomeSpecificException ex) 
{ 
} 
catch(LessSpecificException ex) 
{ 
} 
catch 
{ 
    //some general exception 
} 
+5

Sí, ese es el orden correcto. –

+0

duplicado de http://stackoverflow.com/questions/3960259/catching-exceptions-c/3960283#3960283? – sloth

+0

Si quiere decir "más específico" ya que "se deriva de la clase de excepción menos específica", entonces sí. Sin embargo, si uno no hereda del otro, puede ponerlos en el orden que desee. Se puede argumentar que 'FileNotFoundOnAnyServerException' es _semantically_ más específico que' FileNotFoundException'. Pero si no hereda de 'FileNotFoundException', no hay riesgo de conflicto y, por lo tanto, al compilador no le importa. – Flater

Respuesta

5

Creo que no le permitirá escribirlo en el orden incorrecto.

Esto genera un error:

try 
{ 
    throw new OutOfMemoryException(); 
} 
catch(Exception ex) 
{ 
    "B".Dump(); 
} 
catch(OutOfMemoryException ex) 
{ 
    "A".Dump(); 
} 
+1

"Una cláusula de captura previa ya detecta todas las excepciones de este o de un super tipo ('System.Exception')", para ser específico. –

+0

Ah, yo no sabía esto antes. Gracias – Kurru

+0

@ Martinho Fernandes Creo que el compilador no me deja compilarlo. – Loj

Cuestiones relacionadas