Sdílet prostřednictvím


CA1065: Není vyvolají výjimky neočekávaných místech.

TypeName

DoNotRaiseExceptionsInUnexpectedLocations

CheckId

CA1065

Kategorie

Microsoft.Design

Narušující změna

Nenarušující

Příčina

Metoda, u které není předpokládáno vyvolání výjimky, vyvolala výjimku.

Popis pravidla

Metody, u kterých se neočekává vyvolávání výjimek, lze kategorizovat následujícím způsobem:

  • Metody Get pro vlastnosti

  • Metody přístupových objektů události

  • Metody Equals

  • Metody GetHashCode

  • Metody ToString

  • Statické konstruktory.

  • Finalizační metody

  • Metody Dispose

  • Operátory rovnosti

  • Operátory implicitního přetypování

Následující oddíly popisují tyto typy metod.

Bb386039.collapse_all(cs-cz,VS.110).gifMetody Get pro vlastnosti

Vlastnosti jsou v zásadě inteligentní pole.Proto by se jejich chování mělo co nejvíce podobat poli.Pole nevyvolávají výjimky, což by neměly ani vlastnosti.Pokud máte vlastnost, která vyvolává výjimku, zvažte její změnu na metodu.

Následující výjimky mohou být vyvolány metodou Get pro vlastnost:

Bb386039.collapse_all(cs-cz,VS.110).gifMetody přístupových objektů události

Přístupové objekty události by měly být jednoduchými operacemi, které nevyvolávají výjimky.Událost by neměla vyvolávat výjimku při pokusu přidat nebo odebrat obslužnou rutinu události.

Následující výjimky mohou být vyvolány z přístupového objektu události:

Bb386039.collapse_all(cs-cz,VS.110).gifMetody Equals

Následující metody Equals by neměly vyvolávat výjimky:

Metoda Equals by namísto vyvolání výjimky měla vracet hodnotu true nebo false.Jsou-li například metodě Equals předány dva neshodné typy, měla by vrátit pouze hodnotu false namísto vyvolání výjimky ArgumentException.

Bb386039.collapse_all(cs-cz,VS.110).gifMetody GetHashCode

Následující metody GetHashCode by obvykle neměly vyvolávat výjimky:

Metoda GetHashCode by měla vždy vracet hodnotu.V opačném případě může dojít ke ztrátě položek zatřiďovací tabulky

Verze metody GetHashCode přijímající argumenty mohou vyvolat výjimku ArgumentException.Metoda Object.GetHashCode by však nikdy výjimku vyvolat neměla.

Bb386039.collapse_all(cs-cz,VS.110).gifMetody ToString

Ladicí program používá metodu Object.ToString pro zobrazení informací o objektech ve formátu řetězce.Proto by metoda ToString neměla měnit stav objektu a vyvolávat výjimky.

Bb386039.collapse_all(cs-cz,VS.110).gifStatické konstruktory.

Vyvolávání výjimek ve statickém konstruktoru činí v aktuální doméně aplikací typ nepoužitelným.Pro vyvolání výjimky ze statického konstruktoru by měl existovat velmi dobrý důvod (například problém se zabezpečením).

Bb386039.collapse_all(cs-cz,VS.110).gifFinalizační metody

Vyvolání výjimky z finalizační metody způsobuje rychlé selhání modulu CLR, což značně poškozuje proces.Proto je ve finalizačních metodách zapotřebí se vždy vyhnout vyvolávání výjimek.

Bb386039.collapse_all(cs-cz,VS.110).gifMetody Dispose

Metoda IDisposable.Dispose by neměla vyvolávat výjimku.Metoda Dispose je obvykle volána jako součást logiky čištění v klauzuli finally.Explicitní vyvolávání výjimky z metody Dispose proto nutí uživatele přidat kód pro zpracování výjimky do klauzule finally.

Cesta kódu Dispose(false) by nikdy neměla vyvolat výjimku, protože je téměř vždy volána z finalizační metody.

Bb386039.collapse_all(cs-cz,VS.110).gifOperátory rovnosti (==, !=)

Obdobně jako metody Equals by operátory rovnosti měly vracet hodnotu true nebo false a neměly by vyvolávat výjimky.

Bb386039.collapse_all(cs-cz,VS.110).gifOperátory implicitního přetypování

Jelikož uživatelé si často nejsou vědomi, že byl volán operátor implicitního přetypování, je vyvolání výjimky operátorem implicitního přetypování zcela neočekávané.Proto by z operátorů implicitního přetypování neměly být vyvolávány žádné výjimky.

Jak vyřešit porušení

U metod Get pro vlastnosti buď změňte logiku tak, aby již nevyvolávala výjimku, nebo změňte vlastnost na metodu.

U všech ostatních dříve uvedených typů metod změňte logiku tak, aby již nemusela vyvolávat výjimku.

Kdy potlačit upozornění

Toto upozornění je bezpečné potlačit, pokud bylo porušení zapříčiněno deklarací výjimky, nikoli vyvoláním výjimky.

Související pravidla

CA2219: Není vyvolají výjimky v klauzulích výjimky

Viz také

Další zdroje

Návrh varování