Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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 10 | 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.
Example
// This code violates the rule.
throw new Exception();
throw new NullReferenceException();
throw new IndexOutOfRangeException();
// ...
// This code satisfies the rule.
throw new ArgumentException();
throw new ArgumentNullException();
throw new InvalidOperationException();
// ...
// A minimal implementation of inheritance from Exception
public class CustomException : Exception { }
// Or create your own type that derives from Exception
// This code satisfies the rule too.
throw new CustomException();
Quando eliminare gli avvisi
Non escludere un avviso da questa regola.