Condividi tramite


CA2201: Non generare tipi di eccezione riservati

TypeName

DoNotRaiseReservedExceptionTypes

CheckId

CA2201

Category

Microsoft.Usage

Breaking Change

Breaking

Causa

Un metodo ha generato un tipo di eccezione troppo generale o riservato dal runtime.

Descrizione della regola

I seguenti tipi di eccezione sono troppo generali per fornire informazioni sufficienti all'utente:

I seguenti tipi di eccezione sono riservati e devono essere generati esclusivamente da Common Language Runtime:

Non generare eccezioni generali

Se si genera un tipo di eccezione generale, ad esempio Exception o SystemException in una libreria o framework, i consumer saranno costretti a rilevare tutte le eccezioni, comprese quelle sconosciute che non sono progettati per gestire.

Generare invece un tipo più derivato che esista già nel framework, oppure creare un tipo personalizzato che derivi da Exception.

Generare eccezioni specifiche

Nella tabella seguente vengono mostrati i parametri e le eccezioni da generare quando si convalida il parametro, incluso il parametro valore nella funzione di accesso impostata di una proprietà:

Descrizione parametro:

Eccezione

Riferimento null 

ArgumentNullException

Al di fuori dell'intervallo di valori consentito (ad esempio un indice per una raccolta o un'elenco)

ArgumentOutOfRangeException

Valore enum non valido

InvalidEnumArgumentException

Contiene un formato che non soddisfa le specifiche di parametro di un metodo (ad esempio la stringa di formato per ToString(String))

FormatException

Altri parametri non validi

ArgumentException

Quando un'operazione è non valida per lo stato corrente di un oggetto viene generata InvalidOperationException

Quando viene effettuata un'operazione su un oggetto che è stato eliminato, viene generata ObjectDisposedException

Quando un'operazione non è supportata (ad esempio in un oggetto Stream.Write sottoposto a override in un flusso aperto per la lettura) viene generata NotSupportedException

Quando una conversione comporterebbe un overflow (ad esempio in caso di overload di un operatore di cast esplicito) viene generata OverflowException

Per tutte le altre situazioni, creare un tipo personalizzato che derivi da Exception e generarlo.

Come correggere le violazioni

Per correggere una violazione di questa regola, modificare il tipo dell'eccezione generata in un tipo specifico non compreso tra quelli riservati.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Regole correlate

CA1031: Non rilevare tipi di eccezione generali