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 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
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 l'esecuzione del blocco catch
:
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
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 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
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 l'esecuzione del blocco catch
:
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!