CA2201: Non generare tipi di eccezione riservati
Proprietà | valore |
---|---|
ID regola | CA2201 |
Titolo | Non generare tipi di eccezione riservati |
Categoria | Utilizzo |
Correzione che causa un'interruzione o un'interruzione | Interruzione |
Abilitato per impostazione predefinita in .NET 8 | 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:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
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.