Instrucción try – catch en C sharp

La instrucción try – catch en C#
Información sobre la plantilla
Liiii.jpeg
Cómo utilizar la instrucción try – catch en C#
DesarrolladorMicrosoft Corporation.
Modelo de desarrolloC#
Lanzamiento inicial2005
LicenciaComercial.
Sitio web
http://www.microsoft.com/net

La instrucción try-catch. Consta de un bloque try seguido de una o más cláusulas catch, las cuales especifican controladores para diferentes excepciones. En este artículo se muestra cómo utilizar la instrucción try – catch en el lenguaje de programación C#.

Características

El bloque try contiene el código protegido que puede causar la excepción. Este bloque se ejecuta hasta que se produce una excepción o hasta completarse satisfactoriamente. Por ejemplo, el siguiente intento de convertir un objeto null provoca la excepción NullReferenceException: object o2 = null; try {

   int i2 = (int)o2;   // Error

} La cláusula catch se puede utilizar sin argumentos, en cuyo caso captura cualquier tipo de excepción y se conoce como cláusula catch general. También puede aceptar un argumento de objeto derivado de System.Exception, en cuyo caso trata una excepción específica. Por ejemplo: catch (InvalidCastException e) { } Es posible utilizar más de una cláusula catch específica en la misma instrucción try-catch. En este caso, el orden de las cláusulas catch es importante, ya que las cláusulas catch se examinan por orden. Las excepciones más específicas se capturan antes que las menos específicas. Se puede utilizar una instrucción throw en el bloque catch para volver a producir la excepción, la cual ha sido capturada por la instrucción catch. Por ejemplo: catch (InvalidCastException e) {

   throw (e);    // Rethrowing exception e

} Si desea volver a producir la excepción que está siendo actualmente controlada por una cláusula catch sin parámetros, use la instrucción throw sin argumentos. Por ejemplo: catch {

   throw;

} Dentro de un bloque try, inicialice sólo variables declaradas en su interior; en caso contrario, puede producirse una excepción antes de que se complete la ejecución del bloque. Por ejemplo, en el siguiente ejemplo de código, la variable x se inicializa dentro del bloque try. Al intentar utilizar esta variable fuera del bloque try en la instrucción Write(x), se generará el siguiente error del compilador: Uso de variable local no asignada. static void Main() {

   int x;
   try 
   {
       // No inicialice esta variable aquí.
       x = 123;
   }
   catch
   {
   }
   // Error: Uso de variable sin asignar 'x'.
   Console.Write(x);

}

Ejemplo 1

En este ejemplo, el bloque try contiene una llamada al método MyMethod(), que puede producir una excepción. La cláusula catch contiene el controlador de excepciones, el cual simplemente muestra un mensaje en la pantalla. Cuando se realiza la llamada a la instrucción throw desde dentro de MyMethod, el sistema busca la instrucción catch y muestra el mensaje Exception caught. // try_catch_example.cs using System; class MainClass {

   static void ProcessString(string s)
   {
       if (s == null)
       {
           throw new ArgumentNullException();
       }
   }
   
   static void Main()
   {
       try
       {
           string s = null;
           ProcessString(s);
       }
       catch (Exception e)
       {
           Console.WriteLine("{0} Exception caught.", e);
       }
   }

}

Resultados del Ejemplo 1

System.ArgumentNullException: Value cannot be null.

  en MainClass.Main() se muestra: Exception caught.

Ejemplo 2

En este ejemplo, se utilizan dos instrucciones catch. La excepción más específica, que aparece en primer lugar, se captura primero. // try_catch_ordering_catch_clauses.cs using System; class MainClass {

   static void ProcessString(string s)
   {
       if (s == null)
       {
           throw new ArgumentNullException();
       }
   }
   static void Main()
   {
       try
       {
           string s = null;
           ProcessString(s);
       }
       // Más Específica:
       catch (ArgumentNullException e)
       {
           Console.WriteLine("{0} First exception caught.", e);
       }
       // Más General:
       catch (Exception e)
       {
           Console.WriteLine("{0} Second exception caught.", e);
       }
   }

}

Resultados del Ejemplo 2

System.ArgumentNullException: Value cannot be null.

  en MainClass.Main() se muestra: First exception caught.

Comentarios

En el ejemplo anterior, si empieza con la cláusula catch menos específica, aparecerá el mensaje de error: A previous catch clause already catches all exceptions of this or a super type ('System.Exception') No obstante, para capturar la excepción menos específica, debe reemplazar la instrucción throw por la siguiente: throw new Exception();

Fuente

Información obtenida de la página:

  • ms-help://MS.VSCC.v80/MS.MSDN.v80/MS.VisualStudio.v80.es/dv_csref/html/cb5503c7-bfa1-4610-8fc2-ddcd2e84c438.htm