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 | CA1065 |
| Název | Nevyvolávejte výjimky v neočekávaných umístěních |
| Kategorie | Návrh |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Metoda, u které není předpokládáno vyvolání výjimky, vyvolá výjimku.
Popis pravidla
Metody, které nemají vyvolat výjimky, je možné kategorizovat následujícím způsobem:
- Metody pro získání vlastností
- Metody přistupu k událostem
- Rovná se metodám
- Metody GetHashCode
- Metody ToString
- Statické konstruktory
- Finalizátory
- Dispose – metody
- Operátory rovnosti
- Implicitní operátory přetypování
Tyto typy metod jsou popsány v následujících částech.
Metody získání vlastností
Vlastnosti jsou v podstatě inteligentní pole. Proto by se měly chovat jako pole jak jen to jde. Pole nevyvolávají výjimky a ani by je neměly vyvolávat vlastnosti. Pokud máte vlastnost, která vyvolá výjimku, zvažte vytvoření metody.
Následující výjimky mohou být vyvolány z metody získání vlastnosti:
- System.InvalidOperationException a všechny deriváty (včetně System.ObjectDisposedException)
- System.NotSupportedException a všechny deriváty
- System.ArgumentException (pouze z indexovaného získání)
- System.Collections.Generic.KeyNotFoundException (pouze z indexovaného získání)
Metody přístupového objektu událostí
Metody přístupu k událostem by měly být jednoduché operace, které nezpůsobují výjimky. Událost by neměla vyvolat výjimku, když se pokusíte přidat nebo odebrat obslužnou rutinu události.
Z přistupovače události mohou být vyvolány následující výjimky:
- System.InvalidOperationException a všechny deriváty (včetně System.ObjectDisposedException)
- System.NotSupportedException a všechny deriváty
- System.ArgumentException a deriváty
Rovná se metodám
Následující metody Equals by neměly vyvolat výjimky:
Metoda Equals by se měla vrátit true nebo false místo vyvolání výjimky. Pokud Equals například předáte dva neshodné typy, měl by se vrátit false místo vyvolání znaku ArgumentException.
Metody GetHashCode
Následující GetHashCode metody by obvykle neměly vyvolat výjimky:
GetHashCode vždy by měla vrátit hodnotu. V opačném případě můžete ztratit položky v tabulce hash.
Verze GetHashCode, které přebírají argument, mohou vyvolat ArgumentException.
Object.GetHashCode Nikdy byste ale neměli vyvolat výjimku.
Metody ToString
Ladicí program používá System.Object.ToString k zobrazení informací o objektech v řetězcovém formátu.
ToString Proto by neměl měnit stav objektu a neměl by vyvolat výjimky.
Statické konstruktory
Vyvolání výjimek ze statického konstruktoru způsobí, že typ bude v aktuální doméně aplikace nepoužitelný. Měli byste mít dobrý důvod (například problém se zabezpečením) pro vyvolání výjimky ze statického konstruktoru.
Finalizátory
Vyvolání výjimky z finalizátoru způsobí, že CLR selže rychle, což proces přeruší. Proto se vyhněte vyvolání výjimek v finalizátoru.
Dispose – metody
Metoda System.IDisposable.Dispose by neměla vyvolat výjimku.
Dispose je často volána jako součást logiky čištění v finally klauzuli. Proto explicitně vyvolání výjimky z Dispose vynutí uživatele přidat zpracování výjimek uvnitř finally klauzule.
Cesta Dispose(false) kódu by nikdy neměla vyvolat výjimky, protože Dispose je téměř vždy volána z finalizátoru.
Operátory rovnosti (==, !=)
Podobně jako Equals metody by operátory rovnosti měly vracet buď true nebo false, a neměly by vyvolat výjimky.
Implicitní operátory konverze
Vzhledem k tomu, že uživatel často neví, že byl volán implicitní operátor přetypování, je výjimka vyvolaná tímto operátorem neočekávaná. Proto by z implicitních přetypovacích operátorů neměly být vyvolány žádné výjimky.
Jak opravit porušení
U metody getters změňte logiku tak, aby již nemusela vyvolat výjimku, nebo změňte vlastnost na metodu.
U všech ostatních typů metod uvedených dříve změňte logiku tak, aby již nemusela vyvolat výjimku.
Kdy potlačit upozornění
Pokud příčinou porušení byla deklarace výjimky místo vyvolané výjimky, je bezpečné potlačit upozornění z tohoto pravidla.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1065
// The code that's violating the rule is on this line.
#pragma warning restore CA1065
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1065.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.