En C#, se permite anidar el bloque try & catch. El anidamiento del bloque de prueba significa que un bloque de prueba se puede anidar en otro bloque de prueba. Los diversos programadores usan el bloque de prueba externo para manejar excepciones graves, mientras que el bloque interno para manejar excepciones normales.
Nota:
- Si surge una excepción en el bloque de prueba interno que no es capturada por el bloque de captura asociado con el bloque de prueba, entonces la excepción se promueve al bloque de prueba externo. En general, los bloques de prueba anidados se utilizan para permitir que diferentes grupos de errores se manejen de diferentes maneras.
- Es una condición necesaria que un bloque de prueba debe ser seguido por un bloque de captura o finalmente porque si usa un bloque de prueba sin una captura o finalmente, tenderá a un error de tiempo de compilación.
Sintaxis:
// outer try block try { // inner try block try { // code... } // inner catch block catch { // code... } } // outer catch block catch { // code... }
A continuación se dan algunos ejemplos para entender la implementación de una mejor manera:
Ejemplo 1: en este programa, DivideByZeroException se genera dentro del bloque de prueba interno que es capturado por un bloque de captura asociado con el bloque de prueba interno y continúa el flujo del programa. Cuando IndexOutOfRangeException se genera dentro del bloque de prueba interno que no es capturado por el bloque de captura interno, el bloque de prueba interno transfiere esta excepción al bloque de prueba externo. Después de eso, el bloque catch asociado con el bloque try externo detectó la excepción que hace que el programa finalice. Aquí, para 17/0 y 24/0 , se está ejecutando el bloque de captura interno, pero para el número 25 se está ejecutando el bloque externo de captura.
// C# program to illustrate how outer // try block will handle the exception // which is not handled by the inner // try 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}; // Outer try block // Here IndexOutOfRangeException occurs // due to which program may terminates try { for (int j = 0; j < number.Length; j++) { // Inner try block // Here DivideByZeroException caught // and allow the program to continue // its execution try { Console.WriteLine("Number: " + number[j] + "\nDivisor: " + divisor[j] + "\nQuotient: " + number[j] / divisor[j]); } // Catch block for inner try block catch (DivideByZeroException) { Console.WriteLine("Inner Try Catch Block"); } } } // Catch block for outer try block catch (IndexOutOfRangeException) { Console.WriteLine("Outer Try Catch Block"); } } }
Number: 8 Divisor: 2 Quotient: 4 Inner Try Catch Block Inner Try Catch Block Number: 5 Divisor: 5 Quotient: 1 Outer Try Catch Block
Ejemplo 2: en el siguiente ejemplo, se genera una excepción dentro del bloque de prueba interno que es capturado por el bloque de captura asociado con el bloque de prueba interno.
// C# program to illustrate // nested try block using System; public class Geeks { public string Author_name { get; set; } } // Driver Class public class GFG { // Main Method public static void Main() { Geeks str1 = null; // outer try block try { // inner try block try { str1.Author_name = ""; } // catch block for the inner try block catch { Console.WriteLine("Inner try catch block"); } } // catch block for the outer try block catch { Console.WriteLine("Outer try catch block"); } } }
Inner try catch block
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