Menu
Coddy logo textTech

Blocco finally

Fa parte della sezione Logica e flusso del percorso C# di Coddy. Lezione 27 di 66.

Il blocco finally contiene codice che viene sempre eseguito, indipendentemente dal fatto che si verifichi o meno un’eccezione, anche se nei blocchi try o catch è presente un’istruzione return.

Crea una struttura try-catch-finally di base:

try
{
    // Codice che potrebbe generare un'eccezione
    int result = 10 / 2;
    Console.WriteLine("Result: " + result);
}
catch (DivideByZeroException ex)
{
    // Codice che gestisce l'eccezione
    Console.WriteLine("Cannot divide by zero: " + ex.Message);
}
finally
{
    // Codice che viene sempre eseguito
    Console.WriteLine("This always executes");
}

Il blocco finally è utile per attività di pulizia come chiudere file o connessioni al database:

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
{
    // Chiudi sempre il file, anche se si è verificata un'eccezione
    if (file != null)
    {
        file.Close();
    }
}
challenge icon

Sfida

Facile

Crea un metodo chiamato ProcessData che:

  1. Accetta un parametro stringa che rappresenta un nome file
  2. Tenta di aprire il file e leggerne i contenuti
  3. Scrive i contenuti nella console
  4. Pulisce correttamente le risorse usando un blocco finally
  5. Gestisce FileNotFoundException e IOException

Se non è possibile trovare il file, stampa: "ERROR: File not found: [filename]"

Se si verifica un altro errore IO, stampa: "ERROR: Could not read the file: [error message]"

Stampa sempre "File operation completed." nel blocco finally, indipendentemente dal fatto che si sia verificata o meno un'eccezione.

Provalo tu

using System;
using System.IO;

class Program
{
    public static void ProcessData(string filename)
    {
        // Scrivi il tuo codice qui
    }
    
    static void Main(string[] args)
    {
        string filename = Console.ReadLine();
        ProcessData(filename);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore C# online