Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
| Właściwości | Wartość |
|---|---|
| Identyfikator reguły | CA1065 |
| Tytuł | Nie wywołuj wyjątków w nieoczekiwanych lokalizacjach |
| Kategoria | Projektowanie |
| Poprawka łamiąca lub nienaruszająca | Niezgodność |
| Domyślnie włączone na platformie .NET 10 | Nie. |
| Zastosowane języki | C# i Visual Basic |
Przyczyna
Metoda, od której nie oczekiwano zgłaszania wyjątków, zgłasza wyjątek.
Opis reguły
Metody, które nie powinny zgłaszać wyjątków, można podzielić na kategorie w następujący sposób:
- Metody pobierania właściwości
- Metody dostępu do zdarzeń
- Metody równości
- Metody GetHashCode
- Metody ToString
- Konstruktory statyczne
- Finalizatory
- Metody usuwania
- Operatory równości
- Niejawne operatory rzutowania
W poniższych sekcjach omówiono te typy metod.
Metody pobierania właściwości
Właściwości są zasadniczo polami inteligentnymi. W związku z tym powinny jak najbardziej przypominać pole. Pola nie zgłaszają wyjątków i tak samo nie powinny tego robić właściwości. Jeśli masz właściwość, która zgłasza wyjątek, rozważ przekształcenie jej w metodę.
Następujące wyjątki można zgłosić z metody get właściwości:
- System.InvalidOperationException i wszystkie pochodne (w tym System.ObjectDisposedException)
- System.NotSupportedException i wszystkie pochodne
- System.ArgumentException (tylko z indeksowanego get)
- System.Collections.Generic.KeyNotFoundException (tylko z indeksowanego get)
Metody dostępu do zdarzeń
Metody dostępu do zdarzeń powinny być prostymi operacjami, które nie zgłaszają wyjątków. Zdarzenie nie powinno zgłaszać wyjątku podczas próby dodania lub usunięcia procedury obsługi zdarzeń.
Następujące wyjątki można zgłosić z akcesora zdarzeń:
- System.InvalidOperationException i wszystkie pochodne (w tym System.ObjectDisposedException)
- System.NotSupportedException i wszystkie pochodne
- System.ArgumentException i pochodne
Metody równości
Następujące metody Equals nie powinny zgłaszać wyjątków:
Metoda Equals powinna zwracać true lub false zamiast zgłaszać wyjątek. Jeśli na przykład Equals przekazano dwa niedopasowane typy, powinien po prostu zwrócić false zamiast zgłaszać wyjątek ArgumentException.
Metody GetHashCode
Następujące GetHashCode metody zwykle nie powinny zgłaszać wyjątków:
GetHashCode zawsze powinna zwracać wartość. W przeciwnym razie możesz utracić elementy w tabeli skrótów.
Wersje GetHashCode, które akceptują argument, mogą zgłaszać ArgumentException.
Object.GetHashCode Jednak nigdy nie należy zgłaszać wyjątku.
Metody ToString
Debugger używa System.Object.ToString do wyświetlania informacji o obiektach w formacie ciągu.
ToString W związku z tym nie należy zmieniać stanu obiektu i nie powinien zgłaszać wyjątków.
Konstruktory statyczne
Zgłaszanie wyjątków od konstruktora statycznego powoduje, że typ jest bezużyteczny w bieżącej domenie aplikacji. Należy mieć dobry powód (taki jak problem z zabezpieczeniami) w przypadku zgłaszania wyjątku od konstruktora statycznego.
Finalizatory
Zgłoszenie wyjątku w finalizatorze powoduje, że CLR szybko ulega awarii, co prowadzi do zakończenia procesu. W związku z tym należy unikać zgłaszania wyjątków w finalizatorze.
Metody usuwania
Metoda System.IDisposable.Dispose nie powinna zgłaszać wyjątku.
Dispose jest często wywoływana jako część logiki oczyszczania w klauzuli finally . Dlatego też, jawne rzucanie wyjątku z Dispose wymusza na użytkowniku dodanie obsługi wyjątków wewnątrz klauzuli finally.
Ścieżka Dispose(false) kodu nigdy nie powinna zgłaszać wyjątków, ponieważ Dispose jest prawie zawsze wywoływana z finalizatora.
Operatory równości (==, !=)
Podobnie jak Equals metody, operatory równości powinny zwracać wartości true lub false, i nie powinny zgłaszać wyjątków.
Niejawne operatory rzutowania
Ponieważ użytkownik często nie wie, że został wywołany niejawny operator rzutowania, nieoczekiwany jest wyjątek zgłaszany przez niejawny operator rzutowania. W związku z tym nie należy zgłaszać żadnych wyjątków z niejawnych operatorów rzutów.
Jak naprawić naruszenia
W przypadku metod pobierania właściwości zmień logikę tak, aby nie musiał już zgłaszać wyjątku lub zmienić właściwość na metodę.
Dla wszystkich innych typów metod wymienionych wcześniej zmień logikę, aby nie musiała już zgłaszać wyjątku.
Kiedy pomijać ostrzeżenia
Jeśli naruszenie zostało spowodowane przez deklarację wyjątku zamiast zgłaszanego wyjątku, można bezpiecznie pominąć ostrzeżenie z tej reguły.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1065
// The code that's violating the rule is on this line.
#pragma warning restore CA1065
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1065.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.