Gestione e generazione di eccezioni in .NETHandling and throwing exceptions in .NET

Le applicazioni devono essere in grado di gestire in modo coerente gli errori che si verificano durante l'esecuzione.Applications must be able to handle errors that occur during execution in a consistent manner. .NET offre un modello coerente per l'invio alle applicazioni di notifiche relative agli errori: le operazioni di .NET indicano l'errore generando eccezioni..NET provides a model for notifying applications of errors in a uniform way: .NET operations indicate failure by throwing exceptions.

EccezioniExceptions

Un'eccezione è una condizione di errore o un comportamento imprevisto riscontrato da un programma in esecuzione.An exception is any error condition or unexpected behavior that is encountered by an executing program. Eccezioni possono essere generate in caso di errori nel codice dell'applicazione o nel codice chiamato (ad esempio una libreria condivisa), in caso di risorse del sistema operativo non disponibili, di condizioni impreviste riscontrate dal runtime (ad esempio codice impossibile da verificare) e così via.Exceptions can be thrown because of a fault in your code or in code that you call (such as a shared library), unavailable operating system resources, unexpected conditions that the runtime encounters (such as code that can't be verified), and so on. L'applicazione è in grado di gestire alcune di queste condizioni, altre no.Your application can recover from some of these conditions, but not from others. Sebbene sia possibile gestire gran parte delle eccezioni dell'applicazione, la maggior parte delle eccezioni di runtime risulta ingestibile.Although you can recover from most application exceptions, you can't recover from most runtime exceptions.

In .NET un'eccezione è un oggetto che eredita dalla classe System.Exception.In .NET, an exception is an object that inherits from the System.Exception class. Le eccezioni vengono generate dalle aree di codice in cui si è verificato un problema.An exception is thrown from an area of code where a problem has occurred. Ogni eccezione viene passata ai livelli superiori dello stack finché non viene gestita dall'applicazione o non si arresta il programma.The exception is passed up the stack until the application handles it or the program terminates.

Confronto tra eccezioni e metodi di gestione degli errori tradizionaliExceptions vs. traditional error-handling methods

In precedenza, il modello di gestione degli errori di un linguaggio si basava sul metodo specifico usato da tale linguaggio per rilevare gli errori e individuarne i gestori oppure sul meccanismo di gestione degli errori fornito dal sistema operativo.Traditionally, a language's error-handling model relied on either the language's unique way of detecting errors and locating handlers for them, or on the error-handling mechanism provided by the operating system. La modalità di gestione delle eccezioni di .NET offre i vantaggi seguenti:The way .NET implements exception handling provides the following advantages:

  • La generazione e la gestione delle eccezioni ha lo stesso funzionamento nei linguaggi di programmazione .NET.Exception throwing and handling works the same for .NET programming languages.

  • Senza la necessità di una sintassi di linguaggio apposita, ma con la possibilità per ciascun linguaggio di definire la propria sintassi.Doesn't require any particular language syntax for handling exceptions, but allows each language to define its own syntax.

  • È possibile generare eccezioni anche a livello di più processi e addirittura di più computer differenti.Exceptions can be thrown across process and even machine boundaries.

  • È possibile aggiungere codice per la gestione delle eccezioni a un'applicazione per aumentare l'affidabilità dei programmi.Exception-handling code can be added to an application to increase program reliability.

Le eccezioni presentano vantaggi rispetto ad altri metodi di notifica degli errori, quali i codici restituiti.Exceptions offer advantages over other methods of error notification, such as return codes. Gli errori vengono sempre rilevati poiché se viene generata un'eccezione e l'eccezione non viene gestita, il runtime termina l'applicazione.Failures don't go unnoticed because if an exception is thrown and you don't handle it, the runtime terminates your application. I valori non validi non continuano a propagarsi nel sistema quando il codice non riesce a verificare la presenza di un codice di errore restituito.Invalid values don't continue to propagate through the system as a result of code that fails to check for a failure return code.

Eccezioni comuniCommon exceptions

Nella tabella seguente sono elencate alcune eccezioni comuni con esempi di possibili cause.The following table lists some common exceptions with examples of what can cause them.

Tipo di eccezioneException type DescriptionDescription EsempioExample
Exception Classe base per tutte le eccezioni.Base class for all exceptions. Nessuno (usare una classe derivata di questa eccezione).None (use a derived class of this exception).
IndexOutOfRangeException Generata dal runtime solo quando una matrice viene indicizzata in modo non corretto.Thrown by the runtime only when an array is indexed improperly. Indicizzazione di una matrice esternamente al relativo intervallo valido:Indexing an array outside its valid range:
arr[arr.Length+1]
NullReferenceException Generata dal runtime solo quando viene fatto riferimento a un oggetto Null.Thrown by the runtime only when a null object is referenced. object o = null;
o.ToString();
InvalidOperationException Generata dai metodi con uno stato non valido.Thrown by methods when in an invalid state. Chiamata di Enumerator.MoveNext() dopo la rimozione di un elemento dalla raccolta sottostante.Calling Enumerator.MoveNext() after removing an item from the underlying collection.
ArgumentException Classe base per tutte le eccezioni di argomento.Base class for all argument exceptions. Nessuno (usare una classe derivata di questa eccezione).None (use a derived class of this exception).
ArgumentNullException Generata dai metodi che non consentono un argomento Null.Thrown by methods that do not allow an argument to be null. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Generata dai metodi che verificano se gli argomenti sono compresi in un determinato intervallo.Thrown by methods that verify that arguments are in a given range. String s = "string";
s.Substring(s.Length+1);

Vedere ancheSee also