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 | CA2219 |
| Název | Nevyvolávejte výjimky v klauzulích výjimky |
| Kategorie | Využití |
| Oprava způsobující chybu nebo chybu způsobující chybu | Rozbít, rozbít |
| Povoleno ve výchozím nastavení v .NET 10 | Jako návrh |
Příčina
Výjimka je vyvolán z finallyklauzule , filtru nebo chyby.
Popis pravidla
Pokud je výjimka vyvolána v klauzuli výjimky, výrazně zvyšuje potíže s laděním.
Pokud je výjimka vyvolána v finally klauzuli nebo v klauzuli selhání, nová výjimka skryje aktivní výjimku, pokud je k dispozici. Původní chyba se tak obtížně rozpozná a ladí.
Při vyvolání výjimky v klauzuli filtru modul runtime bezobslužně zachytí výjimku a způsobí, že se filtr vyhodnotí jako false. Neexistuje způsob, jak zjistit rozdíl mezi vyhodnocením filtru na false a výjimkou, která je vyvolána z filtru. To znesnadňuje detekci a ladění chyb v logice filtru.
Jak opravit porušení
Chcete-li opravit toto porušení tohoto pravidla, nevyvolávejte explicitně výjimku z finallyklauzule , filtru nebo chyby.
Example
try
{
// ...
}
finally
{
// This code violates the rule.
throw new Exception();
}
Kdy potlačit upozornění
Nepotlačujte upozornění pro toto pravidlo. Neexistují žádné scénáře, ve kterých výjimka vyvolaná v klauzuli výjimky poskytuje výhodu spuštěného kódu.
Související pravidla
CA1065: Nevyvolávejte výjimky v neočekávaných umístěních