CA2219: Nevyvolávejte výjimky v klauzulích výjimky

Vlastnost Hodnota
ID pravidla CA2219
Název Nevyvolávejte výjimky v klauzulích výjimky
Kategorie Využití
Oprava, která může být destruktivní nebo nedestruktivní Nerozbitný, Rozbitný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Výjimka je vyvolána z finally, klauzule filtru nebo chyby.

Popis pravidla

Pokud dojde k vyvolání výjimky v rámci klauzule výjimky, výrazně se tím ztěžuje proces ladění.

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 odstraňuje.

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 tím, kdy filtr vyhodnotí hodnotu jako 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.

CA1065: Nevyvolávejte výjimky na neočekávaných místech

Viz také