CA2201: Nevyvolávejte vyhrazené typy výjimek

Vlastnost Hodnota
ID pravidla CA2201
Název Nevyvolávejte vyhrazené typy výjimek
Kategorie Využití
Oprava, která může být destruktivní nebo nedestruktivní Přerušující
Povoleno ve výchozím nastavení v .NET 10 Ne
Příslušné jazyky C# a Visual Basic

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ány pouze běhovým prostředím CLR (Common Language Runtime):

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, kterou výjimku vyhodit pro různé typy neplatných argumentů, včetně parametru value v set přistupovači 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, kterou výjimku vyvolat při různých typech 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 není podporována (například při přepsání Stream.Write v datovém proudu otevřeném pro čtení). NotSupportedException
Výsledkem převodu by bylo přetečení (například při přetížení operátoru explicitního typového převodu). OverflowException

Pro všechny ostatní situace zvažte vytvoření vlastního typu, který je odvozen od Exception, a ten pak vyvolejte.

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.