Sobes.tech
Middle

¿Hay alguna diferencia en el orden en que se escriben los bloques catch?

sobes.tech AI

Respuesta de la IA

Sí, existe. Los bloques catch se manejan de manera secuencial. Las excepciones más específicas deben ir antes que las más generales.

try
{
    // Código que puede generar una excepción
}
// Excepción más específica
catch (System.FormatException ex)
{
    // Manejo del error de formato
}
// Excepción menos específica
catch (System.Exception ex)
{
    // Manejo de todas las demás excepciones
}

Si colocas la excepción más general primero, entonces el bloque catch más específico nunca será alcanzado para excepciones que sean herederas de la más general. Por ejemplo, FormatException es heredera de Exception. Si catch (Exception ex) está primero, capturará también a FormatException.

Secuencia incorrecta:

try
{
    // Código que puede generar una excepción
}
// Excepción general
catch (System.Exception ex)
{
    // Manejo de todas las excepciones, incluyendo FormatException
}
// Este bloque nunca será alcanzado para FormatException,
// porque ya fue capturado por el bloque anterior
catch (System.FormatException ex)
{
    // Este código no será alcanzado en este caso
}

El compilador de C# emitirá una advertencia o error por un bloque catch inalcanzable.