C# | Cómo usar la cláusula catch múltiple

El propósito principal del bloque catch es manejar la excepción generada en el bloque try. Este bloque solo se ejecutará cuando se produzca la excepción en el programa.
En C#, puede usar más de un bloque catch con el bloque try. Generalmente, el bloque catch múltiple se usa para manejar diferentes tipos de excepciones, lo que significa que cada bloque catch se usa para manejar diferentes tipos de excepción. Si usa varios bloques catch para el mismo tipo de excepción, obtendrá un error de tiempo de compilación porque C# no le permite usar varios bloques catch para el mismo tipo de excepción . Un bloque catch siempre está precedido por el bloque try.

En general, el bloque catch se comprueba en el orden en que se han producido en el programa. Si el tipo de excepción dado coincide con el primer bloque catch, el primer bloque catch se ejecuta y el resto de los bloques catch se ignoran. Y si el bloque catch inicial no es adecuado para el tipo de excepción, el compilador busca el siguiente bloque catch.

Sintaxis:

try {

// Your code 

}

// 1st catch block
catch(Exception_Name) {

// Code

}

// 2nd catch block
catch(Exception_Name) {

// Code

}

.
.
.
.

A continuación se dan algunos ejemplos para entender la implementación de una mejor manera:

Ejemplo 1: en el siguiente ejemplo, intente bloquear generar dos tipos diferentes de excepción, es decir , DivideByZeroException e IndexOutOfRangeException . Ahora usamos dos bloques catch para manejar estas excepciones que están asociadas con un solo bloque try. Cada bloque catch capturó un tipo diferente de excepción, como el bloque catch 1 que se usa para capturar DivideByZeroException, el bloque catch 2 se usa para capturar IndexOutOfRangeException.

// C# program to illustrate the
// use of multiple catch block
using System;
  
class GFG {
  
    // Main Method
    static void Main()
    {
  
        // Here, number is greater than divisor
        int[] number = { 8, 17, 24, 5, 25 };
        int[] divisor = { 2, 0, 0, 5 };
  
        // --------- try block ---------
  
        for (int j = 0; j < number.Length; j++)
  
            // Here this block raises two different
            // types of exception, i.e. DivideByZeroException
            // and IndexOutOfRangeException
            try {
  
                Console.WriteLine("Number: " + number[j]);
                Console.WriteLine("Divisor: " + divisor[j]);
                Console.WriteLine("Quotient: " + number[j] / divisor[j]);
            }
  
            // Catch block 1
  
            // This Catch block is for
            // handling DivideByZeroException
            catch (DivideByZeroException) {
  
                Console.WriteLine("Not possible to Divide by zero");
            }
  
            // Catch block 2
  
            // This Catch block is for
            // handling IndexOutOfRangeException
            catch (IndexOutOfRangeException) {
                Console.WriteLine("Index is Out of Range");
            }
    }
}
Producción:

Number: 8
Divisor: 2
Quotient: 4
Number: 17
Divisor: 0
Not possible to Divide by zero
Number: 24
Divisor: 0
Not possible to Divide by zero
Number: 5
Divisor: 5
Quotient: 1
Number: 25
Index is Out of Range

Ejemplo 2: en el siguiente ejemplo, intente bloquear generar una excepción. Así que usaremos tres tipos diferentes de bloques catch para manejar la excepción generada por el bloque try. El bloque catch 1 manejará IndexOutOfRangeException , el bloque catch 2 manejará FormatException y el bloque catch 3 manejará OverflowException .

// C# program to illustrate the concept
// of multiple catch clause
using System;
  
class GFG {
  
    // Main method
    static void Main()
    {
  
        // This block raises an exception
        try {
  
            byte data = byte.Parse("a");
            Console.WriteLine(data);
        }
  
        // Catch block 1
  
        // This block is used to handle
        // IndexOutOfRangeException type exception
        catch (IndexOutOfRangeException) {
  
            Console.WriteLine("At least provide one Argument!");
        }
  
        // Catch block 2
  
        // This block is used to handle
        // FormatException type exception
        catch (FormatException) {
  
            Console.WriteLine("Entered value in not a number!");
        }
  
        // Catch block 3
  
        // This block is used to handle
        // OverflowException type exception
        catch (OverflowException) {
  
            Console.WriteLine("Data is out of Range!");
        }
    }
}
Producción:

Entered value in not a number!

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *