Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Gestione degli Errori | Strutture Dati e Gestione dei File
C# Oltre le Basi

bookGestione degli Errori

Potresti aver incontrato il termine errore di runtime nei capitoli precedenti. Un errore di runtime è un errore che si verifica mentre il programma è in esecuzione - da qui il nome "errore di runtime".

Di solito, quando si verifica un errore di runtime, il programma si blocca o smette di rispondere.

Il compilatore può aiutarti individuando la maggior parte degli errori nel codice, ma gli errori di runtime sono per lo più imprevedibili e spesso dipendono da parametri incerti.

Ad esempio, se il percorso del file passato a StreamReader non è valido o non esiste, verrà generato un errore di runtime e il programma si bloccherà. Pertanto, spesso possiamo inserire questo tipo di codice rischioso all'interno di blocchi try-catch per provare ad eseguire del codice e, in caso di errore, catturare e gestire l'errore invece di causare l'arresto del programma.

Di seguito è riportata la sintassi del blocco try-catch:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Qui Exception è una parola chiave che rappresenta il tipo di dato Exception.

Esempio

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Nota

Possiamo omettere la parte (Exception error) dall'istruzione catch se non utilizziamo error.

Di seguito sono riportati alcuni casi comuni in cui può verificarsi un errore a runtime:

Divisione per zero

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Indice non valido di un array o di una lista

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Chiave non trovata (per i dizionari):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

Il blocco finally

Esiste anche un blocco opzionale chiamato finally che viene eseguito dopo l'esecuzione del blocco catch:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. Quale sarà l'output del seguente programma?

2. In C#, qual è lo scopo del blocco finally?

3. Quale delle seguenti affermazioni è vera riguardo al blocco try-catch in C#?

question mark

Quale sarà l'output del seguente programma?

Select the correct answer

question mark

In C#, qual è lo scopo del blocco finally?

Select the correct answer

question mark

Quale delle seguenti affermazioni è vera riguardo al blocco try-catch in C#?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 9

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 2.04

bookGestione degli Errori

Scorri per mostrare il menu

Potresti aver incontrato il termine errore di runtime nei capitoli precedenti. Un errore di runtime è un errore che si verifica mentre il programma è in esecuzione - da qui il nome "errore di runtime".

Di solito, quando si verifica un errore di runtime, il programma si blocca o smette di rispondere.

Il compilatore può aiutarti individuando la maggior parte degli errori nel codice, ma gli errori di runtime sono per lo più imprevedibili e spesso dipendono da parametri incerti.

Ad esempio, se il percorso del file passato a StreamReader non è valido o non esiste, verrà generato un errore di runtime e il programma si bloccherà. Pertanto, spesso possiamo inserire questo tipo di codice rischioso all'interno di blocchi try-catch per provare ad eseguire del codice e, in caso di errore, catturare e gestire l'errore invece di causare l'arresto del programma.

Di seguito è riportata la sintassi del blocco try-catch:

index.cs

index.cs

copy
1234567
try { // code to try } catch (Exception errorVar) { // code to handle error }

Qui Exception è una parola chiave che rappresenta il tipo di dato Exception.

Esempio

index.cs

index.cs

copy
1234567891011121314151617
using System; using System.IO; class Program { static void Main(string[] args) { try { new StreamWriter("C:/a/random/path/that/does/not/exist.txt"); } catch(Exception error) { Console.WriteLine(error.Message); } } }
Note
Nota

Possiamo omettere la parte (Exception error) dall'istruzione catch se non utilizziamo error.

Di seguito sono riportati alcuni casi comuni in cui può verificarsi un errore a runtime:

Divisione per zero

index.cs

index.cs

copy
123456789101112131415161718
using System; class Program { static void Main(string[] args) { try { int a = 100; int b = 0; int result = a / b; } catch { Console.WriteLine("ERROR: Division by Zero."); } } }

Indice non valido di un array o di una lista

index.cs

index.cs

copy
1234567891011121314151617
using System; class Program { static void Main(string[] args) { try { var exampleArray = new int[10]; Console.WriteLine(exampleArray[20]); } catch { Console.WriteLine("ERROR: The array index is out of bounds."); } } }

Chiave non trovata (per i dizionari):

index.cs

index.cs

copy
123456789101112131415161718192021
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } } }

Il blocco finally

Esiste anche un blocco opzionale chiamato finally che viene eseguito dopo l'esecuzione del blocco catch:

index.cs

index.cs

copy
12345678910111213141516171819202122232425
using System; using System.Collections.Generic; class Program { static void Main(string[] args) { try { Dictionary<string, string> myDict = new Dictionary<string, string> { { "key1", "value1" } }; Console.WriteLine(myDict["key2"]); } catch { Console.WriteLine("Error: Key not found"); } finally { Console.WriteLine("This line will show after the error"); } } }

1. Quale sarà l'output del seguente programma?

2. In C#, qual è lo scopo del blocco finally?

3. Quale delle seguenti affermazioni è vera riguardo al blocco try-catch in C#?

question mark

Quale sarà l'output del seguente programma?

Select the correct answer

question mark

In C#, qual è lo scopo del blocco finally?

Select the correct answer

question mark

Quale delle seguenti affermazioni è vera riguardo al blocco try-catch in C#?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 1. Capitolo 9
some-alt