Condividi tramite


Gestione e generazione di eccezioni in .NET

Le applicazioni devono essere in grado di gestire gli errori che si verificano durante l'esecuzione in modo coerente. .NET fornisce un modello per notificare le applicazioni di errori in modo uniforme: le operazioni .NET indicano un errore generando eccezioni.

Eccezioni

Un'eccezione è qualsiasi condizione di errore o comportamento imprevisto rilevato da un programma in esecuzione. È possibile generare eccezioni a causa di un errore nel codice o nel codice chiamato (ad esempio una libreria condivisa), risorse del sistema operativo non disponibili, condizioni impreviste rilevate dal runtime (ad esempio codice che non può essere verificato) e così via. L'applicazione può riprendersi da alcune di queste condizioni, ma non da altre. Sebbene sia possibile eseguire il ripristino dalla maggior parte delle eccezioni dell'applicazione, non è possibile eseguire il ripristino dalla maggior parte delle eccezioni di runtime.

In .NET un'eccezione è un oggetto che eredita dalla System.Exception classe . Viene generata un'eccezione da un'area di codice in cui si è verificato un problema. L'eccezione viene passata su per lo stack fino a quando l'applicazione la gestisce o il programma termina.

Eccezioni e metodi tradizionali di gestione degli errori

Tradizionalmente, il modello di gestione degli errori di un linguaggio si basava sul modo univoco del linguaggio di rilevare gli errori e individuare i gestori per tali errori o sul meccanismo di gestione degli errori fornito dal sistema operativo. Il modo in cui .NET implementa la gestione delle eccezioni offre i vantaggi seguenti:

  • La generazione e la gestione delle eccezioni funzionano allo stesso modo per i linguaggi di programmazione .NET.

  • Non richiede una particolare sintassi del linguaggio per la gestione delle eccezioni, ma consente a ogni linguaggio di definire la propria sintassi.

  • Le eccezioni possono essere generate attraverso i limiti del processo e persino i confini della macchina.

  • Il codice di gestione delle eccezioni può essere aggiunto a un'applicazione per aumentare l'affidabilità del programma.

Le eccezioni offrono vantaggi rispetto ad altri metodi di notifica degli errori, ad esempio i codici di ritorno. Gli errori non passano inosservati perché se un'eccezione viene generata e non viene gestita, il runtime termina l'applicazione. I valori non validi non continuano a propagarsi nel sistema a causa del codice che non riesce a verificare la presenza di un codice restituito di errore.

Eccezioni comuni

Nella tabella seguente sono elencate alcune eccezioni comuni con esempi di ciò che può causarli.

Tipo di eccezione Descrizione Esempio
Exception Classe di base per tutte le eccezioni. Nessuno (usare una classe derivata di questa eccezione).
IndexOutOfRangeException Generata dal runtime solo quando una matrice viene indicizzata in modo non corretto. Indicizzazione di una matrice al di fuori dell'intervallo valido:
arr[arr.Length+1]
NullReferenceException Generata dal runtime solo quando viene fatto riferimento a un oggetto Null. object o = null;
o.ToString();
InvalidOperationException Generato dai metodi quando si trovano in uno stato non valido. Chiamare Enumerator.MoveNext() dopo aver rimosso un elemento dalla raccolta sottostante.
ArgumentException Classe di base per tutte le eccezioni di argomento. Nessuno (usare una classe derivata di questa eccezione).
ArgumentNullException Generata da metodi che non consentono a un argomento di essere nullo. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Generata da metodi che verificano che gli argomenti si trovino in un intervallo specificato. String s = "string";
s.Substring(s.Length+1);

Vedere anche