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
Practice
Projects
Quizzes & Challenges
Quizzes
Challenges
/
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 nostro 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, si verificherà un errore di runtime e il programma si bloccherà. Pertanto, spesso possiamo inserire questo tipo di codice pericoloso all'interno di blocchi try-catch per provare ad eseguire del codice e, nel caso fallisca, 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 il blocco catch. Il blocco finally verrà sempre eseguito dopo i blocchi try e catch, indipendentemente dal fatto che sia stata generata un'eccezione o meno. Questo garantisce che qualsiasi codice all'interno di finally venga eseguito ogni volta, rendendolo utile per operazioni come la chiusura di file o il rilascio di risorse.

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

Suggested prompts:

What are some other examples of runtime errors?

Can you explain how the try-catch block works with a code example?

What is the difference between compile-time and runtime errors?

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 nostro 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, si verificherà un errore di runtime e il programma si bloccherà. Pertanto, spesso possiamo inserire questo tipo di codice pericoloso all'interno di blocchi try-catch per provare ad eseguire del codice e, nel caso fallisca, 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 il blocco catch. Il blocco finally verrà sempre eseguito dopo i blocchi try e catch, indipendentemente dal fatto che sia stata generata un'eccezione o meno. Questo garantisce che qualsiasi codice all'interno di finally venga eseguito ogni volta, rendendolo utile per operazioni come la chiusura di file o il rilascio di risorse.

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