Come usare il blocco try/catch per rilevare le eccezioni

Inserire le istruzioni di codice che possono generare un'eccezione in un blocco try e inserire le istruzioni usate per gestire l'eccezione o le eccezioni in uno o più blocchi catch sotto il blocco try. Ogni blocco catch include il tipo di eccezione e può contenere istruzioni aggiuntive necessarie per gestire quel tipo di eccezione.

Nell'esempio seguente un oggetto StreamReader apre un file chiamato data.txt e recupera una riga dal file. Dato che il codice può generare una qualsiasi delle tre eccezioni disponibili, viene inserito in un blocco try. Tre blocchi catch intercettano le eccezioni e le gestiscono mediante la visualizzazione dei risultati nella console.

using namespace System;
using namespace System::IO;

public ref class ProcessFile
{
public:
    static void Main()
    {
        try
        {
            StreamReader^ sr = File::OpenText("data.txt");
            Console::WriteLine("The first line of this file is {0}", sr->ReadLine());
            sr->Close();
        }
        catch (Exception^ e)
        {
            Console::WriteLine("An error occurred: '{0}'", e);
        }
    }
};

int main()
{
    ProcessFile::Main();
}
using System;
using System.IO;

public class ProcessFile
{
    public static void Main()
    {
        try
        {
            using (StreamReader sr = File.OpenText("data.txt"))
            {
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}");
            }
        }
        catch (FileNotFoundException e)
        {
            Console.WriteLine($"The file was not found: '{e}'");
        }
        catch (DirectoryNotFoundException e)
        {
            Console.WriteLine($"The directory was not found: '{e}'");
        }
        catch (IOException e)
        {
            Console.WriteLine($"The file could not be opened: '{e}'");
        }
    }
}
Imports System.IO

Public Class ProcessFile
    Public Shared Sub Main()
        Try
            Using sr As StreamReader = File.OpenText("data.txt")
                Console.WriteLine($"The first line of this file is {sr.ReadLine()}")
            End Using
        Catch e As FileNotFoundException
            Console.WriteLine($"The file was not found: '{e}'")
        Catch e As DirectoryNotFoundException
            Console.WriteLine($"The directory was not found: '{e}'")
        Catch e As IOException
            Console.WriteLine($"The file could not be opened: '{e}'")
        End Try
    End Sub
End Class

Common Language Runtime (CLR) rileva le eccezioni non gestite dai blocchi catch. Se un'eccezione viene rilevata da CLR, a seconda della configurazione di CLR può verificarsi uno dei risultati seguenti:

  • Viene visualizzata la finestra di dialogo Debug.
  • Il programma interrompe l'esecuzione e viene visualizzata una finestra di dialogo con informazioni sull'eccezione.
  • Viene visualizzato un errore nel flusso di output degli errori standard.

Nota

La maggior parte del codice può generare un'eccezione. Alcune eccezioni, ad esempio OutOfMemoryException, possono essere generate da CLR in qualsiasi momento. Le applicazioni non sono necessarie per gestire queste eccezioni, ma tenere presente questa possibilità quando si creano librerie che devono essere usate da altri utenti. Per suggerimenti su quando impostare il codice di un blocco try, vedere Procedure consigliate per le eccezioni.

Vedi anche