Sobes.tech
Junior

Pode haver vários blocos catch em C# para tratar exceções?

sobes.tech IA

Resposta da IA

Sim, pode haver vários blocos catch. Isto permite tratar diferentes tipos de exceções de forma distinta.

Quando ocorre uma exceção, o CLR verifica sequencialmente os blocos catch de cima para baixo, começando pelo primeiro. O primeiro bloco catch cujo tipo de exceção corresponde ao tipo da exceção lançada ou é a sua classe base é executado.

try
{
    // Código que pode lançar uma exceção
}
catch (ArgumentNullException ex)
{
    // Tratamento da exceção ArgumentNullException
}
catch (IndexOutOfRangeException ex)
{
    // Tratamento da exceção IndexOutOfRangeException
}
catch (Exception ex)
{
    // Tratamento de todas as outras exceções (classe base Exception)
    // Este bloco geralmente é colocado por último
}
finally
{
    // Código que será sempre executado, independentemente de uma exceção ter sido lançada ou não
}

É importante colocar os blocos catch desde os tipos de exceções mais específicos até aos menos específicos (classes base). O bloco catch (Exception ex) deve vir por último, pois captura todas as exceções.