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?
Fantastico!
Completion tasso migliorato a 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!