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 |
| Linguaggi applicabili | C# e Visual Basic |
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 lancia un tipo di eccezione generale, come Exception o SystemException, all'interno di una libreria o di un framework, ciò costringe i consumatori a intercettare tutte le eccezioni, comprese quelle sconosciute che non sanno come gestire.
Invece, utilizza un tipo più specifico già esistente nel framework, oppure crea un tipo proprio che deriva da Exception.
Lanciare eccezioni specifiche
Nella tabella seguente viene illustrata l'eccezione da generare per vari tipi di argomenti non validi, incluso il parametro value nell'accessor set 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 genererebbe un overflow, ad esempio in un sovraccarico esplicito dell'operatore di cast. | OverflowException |
Per tutte le altre situazioni, è consigliabile creare un tipo personalizzato che derivi da Exception e lanciarlo.
Come correggere le violazioni
Per correggere una violazione di questa regola, modificare il tipo dell'eccezione sollevata in un tipo più specifico che non sia 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 sopprimere un avviso da questa regola.