Gestione 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
1234567try { // 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
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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?
Awesome!
Completion rate improved to 2.04
Gestione 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
1234567try { // 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
1234567891011121314151617using 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); } } }
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
123456789101112131415161718using 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
1234567891011121314151617using 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
123456789101112131415161718192021using 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
12345678910111213141516171819202122232425using 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#?
Grazie per i tuoi commenti!