CA2201: Nevyvolávejte vyhrazené typy výjimek
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 8 | 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ů.
Kdy potlačit upozornění
Nepotlačujte upozornění na toto pravidlo.