try/catch/finally, throw new e rethrow
Usate try/catch/finally per una gestione prevedibile degli errori; comprendete la differenza tra throw new e rethrow; mantenete gli esempi brevi e mirati.
try/catch/finally, throw new e rethrow è una lezione C# Academy gratuita su CoddyKit. Questa è la lezione 1 di 3. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C# Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C# Academy include 3 lezioni in totale.
Panoramica sulle eccezioni
Obiettivo: gestire e propagare gli errori in modo sicuro.
- try/catch: gestire eccezioni specifiche
- finally: viene sempre eseguito per la pulizia
- throw new e rilancio
- Mantenga brevi i gestori; non nasconda i bug
Catch specifico
Intercetti l'eccezione più specifica che prevede; mantenga il gestore breve e chiaro.
using System;
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Start");
try
{
int x = 10;
int y = 0; // will cause DivideByZeroException
Console.WriteLine(x / y);
}
catch (DivideByZeroException ex)
{
Console.WriteLine("Cannot divide by zero: " + ex.GetType().Name);
}
Console.WriteLine("Continue");
}
}
Ordine dei catch
L'ordine è importante: inserisca i catch specifici per primi e un catch generico di Exception per ultimo, come rete di sicurezza.
using System;
public class Program
{
static int ParseAndDivide(string text, int divisor)
{
// Throws FormatException or DivideByZeroException
int value = int.Parse(text);
return value / divisor;
}
public static void Main(string[] args)
{
try
{
Console.WriteLine(ParseAndDivide("not-a-number", 2));
}
catch (FormatException)
{
Console.WriteLine("Bad number format");
}
catch (Exception ex)
{
// Fallback last
Console.WriteLine("Other error: " + ex.GetType().Name);
}
}
}
finally per la pulizia
Inserisca la pulizia in finally. Viene eseguito indipendentemente dal verificarsi o meno di un'eccezione.
using System;
public class Program
{
static bool opened = false;
static void UseFakeResource()
{
try
{
opened = true;
Console.WriteLine("Open");
throw new InvalidOperationException("boom");
}
catch (InvalidOperationException)
{
Console.WriteLine("Handled");
}
finally
{
opened = false; // cleanup path
Console.WriteLine("Close");
}
}
public static void Main(string[] args)
{
UseFakeResource();
Console.WriteLine("Opened? " + opened);
}
}
Rilanciare correttamente
Utilizzi throw; per rilanciare l'eccezione e conservare lo stack originale. throw ex; lo reimposta. Incapsuli l'eccezione in una nuova eccezione solo quando aggiunge contesto.
using System;
public class Program
{
static void BadRethrow()
{
try
{
Fail();
}
catch (Exception ex)
{
// Resets stack trace:
throw ex; // BAD rethrow
}
}
static void GoodRethrow()
{
try
{
Fail();
}
catch
{
// Preserves original stack trace:
throw; // GOOD rethrow
}
}
static void Fail()
{
throw new InvalidOperationException("fail");
}
public static void Main(string[] args)
{
try { BadRethrow(); }
catch (Exception ex)
{
Console.WriteLine("Bad: " + (ex.StackTrace == null ? "no stack" : "stack reset likely"));
}
try { GoodRethrow(); }
catch (Exception ex)
{
Console.WriteLine("Good: preserves original stack");
}
}
}
Linee guida per la gestione
Linee guida:
- Intercetti un'eccezione quando può gestirla o aggiungere contesto.
- Altrimenti, lasci che risalga.
- Mantenga brevi i gestori; eviti di ignorare le eccezioni in modo silenzioso.
- Utilizzi finally per la pulizia; la gestione del rilascio delle risorse sarà trattata nella prossima lezione.
Regola del rilancio
Riepilogo
Riepilogo: utilizzi try/catch per gli errori specifici, finally per la pulizia e preferisca throw; quando rilancia un'eccezione, così da conservare lo stack originale.
Domande Frequenti
La lezione «try/catch/finally, throw new e rethrow» è gratuita?
Sì — il testo completo di «try/catch/finally, throw new e rethrow» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C# Academy, passa a CoddyKit PRO. Il corso C# Academy include 3 lezioni in totale.
Cosa imparerò in «try/catch/finally, throw new e rethrow»?
Usate try/catch/finally per una gestione prevedibile degli errori; comprendete la differenza tra throw new e rethrow; mantenete gli esempi brevi e mirati. Eserciti C# Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare C# Academy?
Non è richiesta alcuna esperienza precedente. C# Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 3.
Quanto tempo richiede la lezione «try/catch/finally, throw new e rethrow»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione C# Academy?
Sì. Ogni lezione C# Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- try/catch/finally, throw new e rethrow
- Eccezioni personalizzate; progettazione degli errori
- IDisposable, istruzione using