CA2201: Non generare tipi di eccezione riservati

Proprietà valore
ID regola CA2201
Title Non generare tipi di eccezione riservati
Categoria Utilizzo
La correzione causa un'interruzione o meno Interruzione
Abilitato per impostazione predefinita in .NET 9 No

Causa

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

Descrizione regola

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

I tipi di eccezione seguenti sono riservati e devono essere generati solo 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 in un framework, i consumer devono intercettare tutte le eccezioni, incluse le eccezioni sconosciute che non sanno come gestire.

Generare invece un tipo più derivato già esistente nel framework oppure creare un tipo personalizzato che deriva da Exception.

Generare eccezioni specifiche

Nella tabella seguente viene illustrata l'eccezione da generare per vari tipi di argomenti non validi, incluso il parametro value nella set funzione di accesso di una proprietà.

Argomento non valido Eccezione
null riferimento ArgumentNullException
All'esterno dell'intervallo consentito di valori (ad esempio un indice per una raccolta o un elenco) ArgumentOutOfRangeException
Valore non valido enum InvalidEnumArgumentException
Contiene un formato che non soddisfa le specifiche dei parametri di un metodo (ad esempio la stringa di formato per ToString(String)) FormatException
In caso contrario, non è valido ArgumentException

Nella tabella seguente viene illustrata l'eccezione da generare per vari tipi di operazioni non valide.

Operazione non valida Eccezione
L'operazione non è valida per lo stato corrente di un oggetto. InvalidOperationException
L'operazione viene eseguita su un oggetto eliminato. ObjectDisposedException
L'operazione non è supportata, ad esempio in un override Stream.Write in un flusso aperto per la lettura. NotSupportedException
La conversione genera un overflow, ad esempio in un overload esplicito dell'operatore cast. OverflowException

Per tutte le altre situazioni, è consigliabile creare un tipo personalizzato che deriva da Exception e generarla.

Come correggere le violazioni

Per correggere una violazione di questa regola, modificare il tipo dell'eccezione generata in un tipo specifico che non è uno dei tipi riservati.

Quando eliminare gli avvisi

Non escludere un avviso da questa regola.