Professional Documents
Culture Documents
Capítulo 03
Control de Flujo y Excepciones
• Sintaxis C#
• Depuración básica
• Ver diapositivas previas.
Referencias
}
static void SomeMethod( )
{
Console.WriteLine( "Greetings from SomeMethod!" );
}
}
• do-while (C#)
– Se ejecuta repetidamente hasta que se cumple una condición.
– Se puede salir del bucle con break, goto, return o throw.
• for (C#)
– Se ejecuta repetidamente hasta que se cumple una condición.
– Se puede salir del bucle con break, goto, return o throw.
• while (C#)
– Se ejecuta repetidamente hasta que se la condición sea false.
– Se puede salir del bucle con break, goto, return o throw.
• foreach-in (C#)
– Ejecuta un grupo de sentencias para todos los elementos de un
array o colección.
– Se utiliza mayormente para iterar sobre una colección.
– No debe ser utilizado para para cambiar el contenido de la colección
recorrida.
– Se puede salir del bucle con break, goto, return o throw.
class ForEachTest Output:
{
static void Main(string[] args) 0
{ 1
int[] fibarray = new int[] { 0, 1, 2, 3, 5, 8, 13 }; 2
foreach (int i in fibarray) 3
{ 5
System.Console.WriteLine(i); 8
} 13
}
}
Referencias
• Esquema try-catch-finally:
• Sentencias try-catch:
– Encerrar cualquier código sospechoso de generar una excepción
dentro de un bloque try.
– Atrapar la excepción lanzada dentro del bloque catch.
– Consisten en un bloque try seguida de una o más cláusulas catch.
– No se pueden utilizar variables que han sido declaradas dentro de
un bloque try, fuera del mismo.
int SafeDivision(int x, int y)
{
try
{
return (x / y);
}
catch (System.DivideByZeroException dbz)
{
System.Console.WriteLine("Division by zero attempted!");
return 0;
}
}
Desarrollo de aplicaciones .NET
Eduardo Rivera Alva - MCTS.Net (eriveraa@gmail.com)
Excepciones
• Cláusula catch/esquema:
• Cláusula catch:
– La cláusula catch puede ser utilizada sin argumentos, la cual
captura cualquier tipo de excepción.
• Cláusula catch:
– Pueden existir múltiples cláusulas catch, las cuales pueden tomar un
argumento de tipo objeto, derivado de System.Exception.
static void Main()
{
try
{
string s = null;
ProcessString(s);
}
// Most specific:
catch (ArgumentNullException e)
{
Console.WriteLine("{0} First exception caught.", e);
}
// Least specific:
catch (Exception e)
{
Console.WriteLine("{0} Second exception caught.", e);
}
}
• Cláusula catch/tipos:
• Sentencia throw:
– Las excepciones se pueden relanzar, para ser
recapturadas por el método solicitante, o capa superior.
– Se puede utilizar el catch sin parámetros para
excepciones no-manejadas por el CLR.
try try
{ {
// try to access a resource // try to access a resource
} }
catch catch (System.UnauthorizedAccessException e)
{ {
throw; // re-throw the error LogError(e); // call a custom error logging procedure
} throw e; // re-throw the error
// throw; // also works !!
}
• Sentencias try-catch-finally:
– El bloque finally es útil para limpiar y liberar recursos utilizados en el
bloque try. Se puede utilizar para cerrar conexiones a BD, cerrar
archivos, limpiar el buffer, etc.
– Se ejecuta después de la ejecución de los bloques try y catch.
– El bloque finally siempre se ejecuta, independiente del resultado del
bloque try. public class MainClass
{
try static void Main()
{ {
// Code to try here. int i = 123;
} string s = "Some string";
catch (System.Exception ex) object o = s;
{ try
// Code to handle exception here. {
} // Invalid conversion; „o‟ contains a string not an int
finally i = (int)o;
{ }
// Code to execute after try (and possibly catch) here. finally
} {
Console.Write("i = {0}", i);
}
}
Desarrollo de aplicaciones .NET }
Eduardo Rivera Alva - MCTS.Net (eriveraa@gmail.com)
Excepciones
• Sentencias try-catch-finally:
– Esquema.
• La Clase System.Exception
– Propiedad StackTrace (string / read-only)
• Devuelve una cadena con el nombre de los métodos de la pila.
• Devuelve el número de línea donde se generó la excepción en cada método.
– Propiedad Message (string / read-only)
• Devuelve una cadena explicativa de la razón de la excepción.
– Propiedad HelpLink (string / read-only)
• Se puede establecer para devolver un link con información de ayuda para resolver el
problema.
A base class for exceptions that occur during arithmetic operations, such as
ArithmeticException
DivideByZeroException and OverflowException.
Thrown when an array cannot store a given element because the actual type of the element is
ArrayTypeMismatchException
incompatible with the actual type of the array.
Thrown when an attempt is made to index an array when the index is less than zero or outside
IndexOutOfRangeException
the bounds of the array.
Thrown when an explicit conversion from a base type to an interface or to a derived type fails at
InvalidCastException
runtime.
NullReferenceException Thrown when you attempt to reference an object whose value is null.
Thrown when an attempt to allocate memory using the new operator fails. This indicates that the
OutOfMemoryException
memory available to the Common Language Runtime has been exhausted.
Thrown when the execution stack is exhausted by having too many pending method calls; usually
StackOverflowException
indicates a very deep or infinite recursion.
Thrown when a static constructor throws an exception and no compatible catch clause exists to
TypeInitializationException
catch it.
• Jerarquía de System.Exception
• Expansión de la jerarquía
• Excepciones personalizadas:
– No se cumple la expansión de la jerarquía en las mismas
clases base del NET Framework.
– Evitar jerarquías demasiado profundas.
– Derivar de System.Exception o otra excepción base.
– Terminar el nombre de la clase con el prefijo “Exception”.
– Hacer la excepción serializable para asegurar su
funcionamiento a través de las capas de la aplicación y
límites remotos (webservices, remoting).
• Excepciones personalizadas:
– Proveer (por lo menos) los siguientes constructores:
public class SomeException: Exception, ISerializable {
public SomeException();
public SomeException(string message);
public SomeException(string message, Exception inner);
• Arrays y Colecciones