Questa pagina è stata utile?
I suggerimenti relativi al contenuto di questa pagina sono importanti. Comunicaceli.
Altri suggerimenti?
1500 caratteri rimanenti
Classe Exception
Collapse the table of content
Expand the table of content
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale

Classe Exception

Rappresenta gli errori che si verificano durante l'esecuzione dell'applicazione.

Spazio dei nomi:  System
Assembly:  mscorlib (in mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
public class Exception : ISerializable, _Exception

Il tipo Exception espone i seguenti membri.

  NomeDescrizione
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifException()Inizializza una nuova istanza della classe Exception.
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifException(String)Consente l'nizializzazione di una nuova istanza della classe Exception con un messaggio di errore specificato.
Metodo protettoException(SerializationInfo, StreamingContext)Consente l'inizializzazione di una nuova istanza della classe Exception con dati serializzati.
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifException(String, Exception)Consente l'inizializzazione di una nuova istanza della classe Exception con un messaggio di errore specificato e un riferimento all'eccezione interna che è la causa dell'eccezione corrente.
In alto

  NomeDescrizione
Proprietà pubblicaData Ottiene una collezione di coppie chiave/valore che forniscono ulteriori informazioni definite dall'utente sull'eccezione.
Proprietà pubblicaHelpLinkOttiene o imposta un collegamento al file della Guida associato all'eccezione.
Proprietà protetta.Supportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifHResult Ottiene o imposta HRESULT, un valore numerico codificato che viene assegnato ad una specifica eccezione.
Proprietà pubblicaSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifInnerExceptionOttiene l'istanza di Exception che ha causato l'eccezione corrente.
Proprietà pubblicaSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifMessageOttiene un messaggio che descrive l'eccezione corrente.
Proprietà pubblicaSourceOttiene o imposta il nome dell'oggetto o dell'applicazione che ha generato l'errore.
Proprietà pubblicaSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifStackTrace Ottiene una rappresentazione in forma di stringa dei frame nello stack di chiamate.
Proprietà pubblicaTargetSite Ottiene il metodo che ha generato l'eccezione corrente.
In alto

  NomeDescrizione
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifEquals(Object)Determina se l'oggetto Object specificato è uguale all'oggetto Object corrente. (Ereditato da Object)
Metodo protettoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifFinalize Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object)
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifGetBaseException Quando sottoposto a override in una classe derivata, restituisce l'Exception che è la causa principale di una o più eccezioni successive.
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifGetHashCodeFunge da funzione hash per un determinato tipo. (Ereditato da Object)
Metodo pubblicoGetObjectDataQuando l'override viene eseguito in una classe derivata, imposta il controllo SerializationInfo per la colonna.
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifGetTypeOttiene il tipo di runtime dell'istanza corrente.

In XNA Framework 3.0 questo membro viene ereditato da Object.GetType().


In   questo membro viene ereditato da Object.GetType().
Metodo protettoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifMemberwiseClone Crea una copia dei riferimenti dell'oggetto Object corrente. (Ereditato da Object)
Metodo pubblicoSupportato da XNA Frameworkc18k6c59.PortableClassLibrary(it-it,VS.100).gifToStringCrea e restituisce una rappresentazione in forma di stringa della corrente eccezione. (Esegue l'override di Object.ToString()).
In alto

  NomeDescrizione
Evento protettoSerializeObjectStateSi verifica quando un'eccezione viene serializzata per creare un oggetto stato di eccezione che contiene dati serializzati sull'eccezione.
In alto

Questa classe è la classe base per tutte le eccezioni. Quando si verifica un errore, il sistema o l'applicazione correntemente in esecuzione lo segnala generando un'eccezione che contiene informazioni relative all'errore. Una volta generata, l'eccezione viene gestita dall'applicazione o dal gestore eccezioni predefinito.

Blocchi try-catch

Common Language Runtime comprende un modello di gestione delle eccezioni, basato sulla rappresentazione delle eccezioni come oggetti e sulla separazione del codice di programma e del codice di gestione delle eccezioni rispettivamente in blocchi try e blocchi catch. Possono essere presenti uno o più blocchi catch, ognuno progettato per gestire un particolare tipo di eccezione. In alternativa, può essere presente un blocco creato per intercettare un'eccezione più specifica rispetto a un altro blocco.

Se un'applicazione gestisce le eccezioni che si verificano durante l'esecuzione di un blocco di codice di un'applicazione, il codice deve trovarsi all'interno di un'istruzione try. Il codice dell'applicazione all'interno di un'istruzione try è un blocco try. Il codice dell'applicazione che gestisce le eccezioni generate da un blocco try si trova all'interno di un'istruzione catch e viene detto bloccocatch. A un blocco try sono associati zero o più blocchi catch e ogni blocco catch include un filtro di tipo che determina i tipi di eccezione che verranno gestiti.

Quando si verifica un'eccezione in un blocco try, viene eseguita la ricerca dei blocchi catch nell'ordine in cui appaiono nel codice dell'applicazione, fino a che non viene individuato un blocco catch che gestisce l'eccezione. Un blocco catch gestisce un'eccezione di tipo T se nel filtro di tipo del blocco catch è specificato T o qualsiasi tipo da cui T deriva. La ricerca viene interrotta dopo il rilevamento del primo blocco catch che gestisce l'eccezione. Per questo motivo, nel codice dell'applicazione, un blocco catch che gestisce un tipo deve essere specificato prima di un blocco catch che gestisce i relativi tipi di base, come dimostrato nell'esempio illustrato di seguito in questa sezione. Un blocco catch che gestisce System.Exception viene specificato per ultimo.

Se nessuno dei blocchi catch associati al blocco try corrente gestisce l'eccezione e se il blocco try corrente è annidato all'interno di altri blocchi try nella chiamata corrente, vengono ricercati i blocchi catch associati al blocco try successivo che li contiene. Se non viene rilevato alcun blocco catch per l'eccezione, viene eseguita la ricerca dei precedenti livelli di annidamento nella chiamata corrente. Se non viene rilevato alcun blocco catch per l'eccezione nella chiamata corrente, l'eccezione viene passata sullo stack di chiamate e viene eseguita la ricerca di un blocco catch che gestisce l'eccezione nello stack frame precedente. La ricerca dello stack di chiamate continua fino a quando viene gestita l'eccezione o non esistono più frame nello stack di chiamate. Se si raggiunge l'inizio dello stack di chiamate senza che venga rilevato alcun blocco catch che gestisce l'eccezione, questa viene gestita dal gestore eccezioni predefinito e l'applicazione viene terminata.

Funzionalità dei tipi di eccezione

I tipi di eccezione supportano le seguenti caratteristiche:

  • Testo in formato leggibile in cui viene descritto l'errore. Quando si verifica un'eccezione, il runtime rende disponibile un messaggio di testo per informare l'utente della natura dell'errore e per suggerire come risolvere il problema. Questo messaggio di testo è contenuto nella proprietà Message dell'oggetto eccezione. Durante la creazione dell'oggetto eccezione, è possibile passare una stringa di testo al costruttore per descrivere i dettagli di quella particolare eccezione. Se al costruttore non viene fornito alcun argomento di messaggio di errore, viene utilizzato il messaggio di errore predefinito.

  • Lo stato dello stack di chiamate al momento della generazione dell'eccezione. La proprietà StackTrace riporta una traccia dello stack che può essere utilizzata per determinare il punto del codice in cui si è verificato l'errore. Nella traccia dello stack vengono elencati tutti i metodi chiamati e i numeri di riga nel file di origine dove vengono eseguite le chiamate.

Categorie dei tipi di eccezione

Nell'ambito della classe base Exception sono presenti due categorie di eccezioni:

  • Le classi di eccezione già definite di Common Language Runtime derivate da SystemException.

  • Le classi di eccezione dell'applicazione definite dall'utente derivate da ApplicationException.

Proprietà della classe Exception

Exception include diverse proprietà in grado di identificare la posizione del codice, il tipo, il file della Guida e il motivo dell'eccezione: StackTrace, InnerException, Message, HelpLink, HResult, Source, TargetSite e Data.

Se esiste una relazione causa-effetto tra due o più eccezioni, la proprietà InnerException mantiene queste informazioni. L'eccezione esterna viene generata in risposta all'eccezione interna. Il codice che gestisce l'eccezione esterna può utilizzare le informazioni relative all'eccezione interna precedente per gestire l'errore in modo più appropriato. Ulteriori informazioni sull'eccezione possono essere memorizzate nella proprietà Data.

È necessario localizzare la stringa del messaggio di errore passata al costruttore durante la creazione dell'oggetto eccezione; il messaggio può essere fornito da un file di risorsa utilizzando ResourceManager. Per ulteriori informazioni sulle risorse localizzate, vedere i cenni preliminari sullo spazio dei nomi System.Resources e Creazione del package e distribuzione delle risorse.

Per fornire all'utente informazioni relative alla causa dell'eccezione, la proprietà HelpLink può contenere un URL (o URN) di un file della Guida.

Exception utilizza HRESULT COR_E_EXCEPTION, con valore 0x80131500.

Per un elenco dei valori iniziali di proprietà per un'istanza di Exception, vedere i costruttori Exception.

Considerazioni sulle prestazioni

La generazione o la gestione di un'eccezione richiede una notevole quantità di risorse di sistema e tempo di esecuzione. È pertanto consigliabile generare eccezioni solo per gestire condizioni straordinarie e non per gestire eventi prevedibili o per il controllo del flusso. L'applicazione può ad esempio generare un'eccezione se un argomento del metodo non è valido, perché il metodo deve essere chiamato con parametri validi e un argomento di metodo non valido costituisce un evento straordinario. Evitare invece la generazione di eccezioni relative a input utente non valido, perché è possibile prevedere che l'utente potrebbe immettere dati non validi. Per gestire questa eventualità è possibile fornire un meccanismo di ripetizione, per consentire all'utente di immettere dati di input validi.

Generare le eccezioni solo in condizioni straordinarie, quindi intercettarle in un unico gestore di eccezioni generico, che può essere utilizzato per la maggior parte delle eccezioni dell'applicazione, anziché in gestori applicabili solo a eccezioni specifiche. Si consiglia di adottare questo approccio perché la maggior parte degli errori può essere gestita tramite codice di convalida e di gestione degli errori in prossimità dell'errore stesso. Non è pertanto necessario generare o rilevare alcuna eccezione. Il gestore di eccezioni generico rileva le eccezioni realmente impreviste, generate in qualsiasi punto dell'applicazione.

Evitare inoltre di generare eccezioni in tutti i casi in cui è sufficiente un codice restituito. Non convertire un codice restituito in eccezione e non rilevare regolarmente le eccezioni per poi ignorarle e continuare l'elaborazione.

Nel seguente esempio di codice viene illustrato un blocco catch definito per gestire errori ArithmeticException. Questo blocco catch rileva anche errori DivideByZeroException dal momento che DivideByZeroException deriva da ArithmeticException e non esiste alcun blocco catch esplicitamente definito per errori DivideByZeroException.


using System;

class ExceptionTestClass 
{
   public static void Main() 
   {
      int x = 0;
      try 
      {
         int y = 100/x;
      }
         catch (ArithmeticException e) 
         {
            Console.WriteLine("ArithmeticException Handler: {0}", e.ToString());
         }
         catch (Exception e) 
         {
            Console.WriteLine("Generic Exception Handler: {0}", e.ToString());
         }
   }	
}
/*
This code example produces the following results:

ArithmeticException Handler: System.DivideByZeroException: Attempted to divide by zero.
   at ExceptionTestClass.Main()

*/


.NET Framework

Supportato in: 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Supportato in: 4, 3.5 SP1

Supportato in:

Windows 7, Windows Vista SP1 o versione successiva, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (componenti di base del server non supportati), Windows Server 2008 R2 (componenti di base del server supportati con SP1 o versione successiva), Windows Server 2003 SP2

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema di .NET Framework.

Qualsiasi membro static (Shared in Visual Basic) pubblico di questo tipo è thread-safe. I membri di istanza non sono garantiti come thread-safe.

System.Object
  System.Exception
    Microsoft.Build.BuildEngine.InternalLoggerException
    Microsoft.Build.BuildEngine.InvalidProjectFileException
    Microsoft.Build.BuildEngine.InvalidToolsetDefinitionException
    Microsoft.Build.BuildEngine.RemoteErrorException
    Microsoft.Build.Exceptions.BuildAbortedException
    Microsoft.Build.Exceptions.InternalLoggerException
    Microsoft.Build.Exceptions.InvalidProjectFileException
    Microsoft.Build.Exceptions.InvalidToolsetDefinitionException
    Microsoft.Build.Framework.LoggerException
    Microsoft.CSharp.RuntimeBinder.RuntimeBinderException
    Microsoft.CSharp.RuntimeBinder.RuntimeBinderInternalCompilerException
    Microsoft.JScript.CmdLineException
    Microsoft.JScript.ParserException
    Microsoft.VisualBasic.ApplicationServices.CantStartSingleInstanceException
    Microsoft.VisualBasic.ApplicationServices.NoStartupFormException
    Microsoft.VisualBasic.Compatibility.VB6.WebClassContainingClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassCouldNotFindEvent
    Microsoft.VisualBasic.Compatibility.VB6.WebClassNextItemCannotBeCurrentWebItem
    Microsoft.VisualBasic.Compatibility.VB6.WebClassNextItemRespondNotFound
    Microsoft.VisualBasic.Compatibility.VB6.WebClassUserWebClassNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassWebClassFileNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebClassWebItemNotValid
    Microsoft.VisualBasic.Compatibility.VB6.WebItemAssociatedWebClassNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebItemClosingTagNotFound
    Microsoft.VisualBasic.Compatibility.VB6.WebItemCouldNotLoadEmbeddedResource
    Microsoft.VisualBasic.Compatibility.VB6.WebItemCouldNotLoadTemplateFile
    Microsoft.VisualBasic.Compatibility.VB6.WebItemNameNotOptional
    Microsoft.VisualBasic.Compatibility.VB6.WebItemNoTemplateSpecified
    Microsoft.VisualBasic.Compatibility.VB6.WebItemTooManyNestedTags
    Microsoft.VisualBasic.Compatibility.VB6.WebItemUnexpectedErrorReadingTemplateFile
    Microsoft.VisualBasic.CompilerServices.IncompleteInitialization
    Microsoft.VisualBasic.CompilerServices.InternalErrorException
    Microsoft.VisualBasic.FileIO.MalformedLineException
    System.Activities.ExpressionParser.SourceExpressionException
    System.Activities.Expressions.LambdaSerializationException
    System.Activities.InvalidWorkflowException
    System.Activities.Presentation.Metadata.AttributeTableValidationException
    System.Activities.Statements.WorkflowTerminatedException
    System.Activities.WorkflowApplicationException
    System.AddIn.Hosting.AddInSegmentDirectoryNotFoundException
    System.AddIn.Hosting.InvalidPipelineStoreException
    System.AggregateException
    System.ApplicationException
    System.ComponentModel.Composition.CompositionContractMismatchException
    System.ComponentModel.Composition.CompositionException
    System.ComponentModel.Composition.ImportCardinalityMismatchException
    System.ComponentModel.Composition.Primitives.ComposablePartException
    System.ComponentModel.DataAnnotations.ValidationException
    System.ComponentModel.Design.ExceptionCollection
    System.Configuration.Provider.ProviderException
    System.Configuration.SettingsPropertyIsReadOnlyException
    System.Configuration.SettingsPropertyNotFoundException
    System.Configuration.SettingsPropertyWrongTypeException
    System.Data.Linq.ChangeConflictException
    System.Diagnostics.Eventing.Reader.EventLogException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectExistsException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryObjectNotFoundException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryOperationException
    System.DirectoryServices.ActiveDirectory.ActiveDirectoryServerDownException
    System.DirectoryServices.Protocols.DirectoryException
    System.IdentityModel.Selectors.CardSpaceException
    System.IdentityModel.Selectors.IdentityValidationException
    System.IdentityModel.Selectors.PolicyValidationException
    System.IdentityModel.Selectors.ServiceBusyException
    System.IdentityModel.Selectors.ServiceNotStartedException
    System.IdentityModel.Selectors.StsCommunicationException
    System.IdentityModel.Selectors.UnsupportedPolicyOptionsException
    System.IdentityModel.Selectors.UntrustedRecipientException
    System.IdentityModel.Selectors.UserCancellationException
    System.InvalidTimeZoneException
    System.IO.IsolatedStorage.IsolatedStorageException
    System.IO.Log.SequenceFullException
    System.Management.Instrumentation.InstrumentationBaseException
    System.Management.Instrumentation.WmiProviderInstallationException
    System.Net.Mail.SmtpException
    System.Net.PeerToPeer.PeerToPeerException
    System.Runtime.CompilerServices.RuntimeWrappedException
    System.Runtime.DurableInstancing.InstancePersistenceException
    System.Runtime.Remoting.MetadataServices.SUDSGeneratorException
    System.Runtime.Remoting.MetadataServices.SUDSParserException
    System.Runtime.Serialization.InvalidDataContractException
    System.Security.RightsManagement.RightsManagementException
    System.ServiceModel.Channels.InvalidChannelBindingException
    System.SystemException
    System.Threading.BarrierPostPhaseException
    System.Threading.LockRecursionException
    System.Threading.Tasks.TaskSchedulerException
    System.TimeZoneNotFoundException
    System.Web.Query.Dynamic.ParseException
    System.Web.Security.MembershipCreateUserException
    System.Web.Security.MembershipPasswordException
    System.Web.UI.ViewStateException
    System.Web.UI.WebControls.EntityDataSourceValidationException
    System.Web.UI.WebControls.LinqDataSourceValidationException
    System.Windows.Automation.NoClickablePointException
    System.Windows.Automation.ProxyAssemblyNotLoadedException
    System.Windows.Controls.PrintDialogException
    System.Windows.Forms.AxHost.InvalidActiveXStateException
    System.Windows.Xps.XpsException
    System.Windows.Xps.XpsWriterException
    System.Workflow.Activities.Rules.RuleException
    System.Workflow.ComponentModel.Compiler.WorkflowValidationFailedException
    System.Workflow.ComponentModel.Serialization.WorkflowMarkupSerializationException
    System.Workflow.ComponentModel.WorkflowTerminatedException
    System.Workflow.Runtime.WorkflowOwnershipException
    System.Xaml.XamlException

Aggiunte alla community

AGGIUNGI
Microsoft sta conducendo un sondaggio in linea per comprendere l'opinione degli utenti in merito al sito Web di MSDN. Se si sceglie di partecipare, quando si lascia il sito Web di MSDN verrà visualizzato il sondaggio in linea.

Si desidera partecipare?
Mostra:
© 2015 Microsoft