Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA2201 |
| Název | Nevyvolávejte vyhrazené typy výjimek |
| Kategorie | Využití |
| Oprava způsobující chybu nebo chybu způsobující chybu | Narušující |
| Povoleno ve výchozím nastavení v .NET 10 | No |
Příčina
Metoda vyvolá typ výjimky, který je příliš obecný nebo který je vyhrazený modulem runtime.
Popis pravidla
Následující typy výjimek jsou příliš obecné, aby uživateli poskytly dostatečné informace:
Následující typy výjimek jsou rezervované a měly by být vyvolán pouze modulem CLR (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
Nevyvolávejte obecné výjimky
Pokud vyvoláte obecný typ výjimky, například Exception nebo SystemException, v knihovně nebo rozhraní, vynutí uživatele zachytit všechny výjimky, včetně neznámých výjimek, které neví, jak zpracovat.
Místo toho buď vyvoláte odvozenější typ, který již existuje v rozhraní, nebo vytvořte vlastní typ odvozený z Exception.
Vyvolání konkrétních výjimek
Následující tabulka ukazuje, která výjimka vyvolání pro různé typy neplatných argumentů, včetně parametru value v set přistupovacím objektu vlastnosti.
| Neplatný argument | Výjimka |
|---|---|
null odkaz |
ArgumentNullException |
| Mimo povolený rozsah hodnot (například index pro kolekci nebo seznam) | ArgumentOutOfRangeException |
Neplatná enum hodnota |
InvalidEnumArgumentException |
Obsahuje formát, který nesplňuje specifikace parametrů metody (například formátovací řetězec pro ToString(String)). |
FormatException |
| Jinak je neplatný | ArgumentException |
Následující tabulka ukazuje, která výjimka vyvolání pro různé typy neplatných operací.
| Neplatná operace | Výjimka |
|---|---|
| Operace je neplatná pro aktuální stav objektu. | InvalidOperationException |
| Operace se provádí u objektu, který byl odstraněn. | ObjectDisposedException |
Operace se nepodporuje (například v přepsání Stream.Write datového proudu otevřeného pro čtení). |
NotSupportedException |
| Výsledkem převodu by byl přetečení (například přetížení operátoru explicitního přetypování). | OverflowException |
Pro všechny ostatní situace zvažte vytvoření vlastního typu, který je odvozen od Exception a vyvolání.
Jak opravit porušení
Chcete-li opravit porušení tohoto pravidla, změňte typ vyvolané výjimky na konkrétní typ, který není jedním z rezervovaných typů.
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();
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.