Bloque Finally
Parte de la sección Lógica y Flujo del Journey de C# de Coddy. Lección 27 de 66.
El bloque finally contiene código que siempre se ejecuta, ocurra o no una excepción, incluso si hay una sentencia return en los bloques try o catch.
Crea una estructura básica de try-catch-finally:
try
{
// Código que podría lanzar una excepción
int result = 10 / 2;
Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
// Código que maneja la excepción
Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
// Código que siempre se ejecuta
Console.WriteLine("This always executes");
}
El bloque finally es útil para tareas de limpieza como cerrar archivos o conexiones de base de datos:
System.IO.StreamReader file = null;
try
{
file = new System.IO.StreamReader("data.txt");
string content = file.ReadToEnd();
Console.WriteLine(content);
}
catch (System.IO.FileNotFoundException)
{
Console.WriteLine("File not found.");
}
finally
{
// Siempre cerrar el archivo, incluso si ocurrió una excepción
if (file != null)
{
file.Close();
}
}
Desafío
FácilCrea un método llamado ProcessData que:
- Toma un parámetro string que representa un nombre de archivo
- Intenta abrir el archivo y leer su contenido
- Escribe el contenido en la consola
- Limpia correctamente los recursos usando un bloque finally
- Maneja FileNotFoundException e IOException
Si el archivo no se puede encontrar, imprime: "ERROR: File not found: [filename]"
Si ocurre otro error de IO, imprime: "ERROR: Could not read the file: [error message]"
Siempre imprime "File operation completed." en el bloque finally, haya ocurrido una excepción o no.
Pruébalo tú mismo
using System;
using System.IO;
class Program
{
public static void ProcessData(string filename)
{
// Escribe tu código aquí
}
static void Main(string[] args)
{
string filename = Console.ReadLine();
ProcessData(filename);
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Arrays multidimensionales
Conceptos básicos de arrays 2DDeclaración e inicialización de arrays 2DAcceso a elementos de arrays 2DBucles anidados con arrays 2DArrays irregularesOperaciones comunes con matricesRepaso: arrays multidimensionales4Técnicas de control de flujo
Retornos anticipadosCláusulas de guardaSentencias de salto (goto)Break y ContinueAplanar condicionales anidados7Operadores lógicos avanzados
Evaluación de cortocircuitoOperadores lógicos condicionalesPrecedencia de operadoresRepaso: operadores avanzados2Toma de decisiones avanzada
Múltiples condicionesLógica booleana complejaComparación entre If y SwitchSentencias Switch anidadasRepaso: decisiones avanzadas5Manejo de excepciones
Fundamentos de Try-CatchTipos de excepcionesMúltiples bloques CatchTrabajo con archivosBloque FinallyUso de Using frente a Try-FinallyExcepciones personalizadasRepaso: manejo de errores3Mejoras de bucles
Rendimiento de buclesIteración de estructuras complejasCada tipo de bucleRefactorización de buclesRepaso: bucles optimizados6Manejo de valores nulos
Conceptos básicos de referencias nulasTipos de valor anulablesPatrones de comprobación de valores nulosProgramación defensivaRepaso: seguridad frente a valores nulosPractica por tu cuenta: Compilador de C# online