Udostępnij za pośrednictwem


CA1065: Nie należy wyrzucać wyjątków w nieoczekiwanych lokalizacjach

TypeName

DoNotRaiseExceptionsInUnexpectedLocations

CheckId

CA1065

Kategoria

Microsoft.Design

Zmiana kluczowa

Niekluczowa

Przyczyna

Metoda, od której nie oczekiwano zgłaszania wyjątków, zgłasza wyjątek.

Opis reguły

Metody, od których nie oczekuje się zgłaszania wyjątków, mogą zostać podzielone w następujący sposób:

  • Metody Get właściwości

  • Metody dostępu do zdarzeń

  • Metody Equals

  • Metody GetHashCode

  • Metody ToString

  • Konstruktory statyczne

  • Finalizatory

  • Metody Dispose

  • Operatory równości

  • Operatory niejawnego rzutowania

W poniższych sekcjach opisano te typy metody.

Metody Get właściwości

Właściwości są zasadniczo inteligentnymi polami.Dlatego powinny działać możliwie podobnie do pól.Pola nie zgłaszają wyjątków i z tego powodu właściwości również nie powinny ich zgłaszać.Jeśli posiadasz właściwość, która zgłasza wyjątek, rozważ zmianę jej na metodę.

Następujące wyjątki mogą być zgłaszane przez metodę get właściwości:

Metody dostępu do zdarzeń

Dostęp do zdarzeń powinien być prostymi operacjami, które nie zgłaszają wyjątków.Zdarzenie nie powinno zgłaszać wyjątków, gdy próbujesz dodać lub usunąć obsługę zdarzenia.

Następujące wyjątki mogą być zgłaszane podczas dostępu do zdarzeń:

Metody Equals

Następujące metody Equals nie powinny zgłaszać wyjątków:

Metoda Equals powinna zwrócić true lub false zamiast zgłaszać wyjątek.Na przykład, jeśli do metody Equals zostaną przekazane dwa niedopasowane typy, powinna zwrócić po prostu false zamiast zgłaszać wyjątek ArgumentException.

Metody GetHashCode

Następujące metody GetHashCode zazwyczaj nie powinny zgłaszać wyjątków:

Metoda GetHashCode powinna zawsze zwracać wartość.W przeciwnym razie, możesz stracić elementy w tabeli skrótów.

Wersje metody GetHashCode, które przyjmują argument, mogą zgłosić wyjątek ArgumentException.Jednakże, metoda Object.GetHashCode nigdy nie powinna zgłaszać wyjątku.

Metody ToString

Debuger wykorzystuje metodę Object.ToString do wyświetlania informacji o obiektach w formacie ciągu znaków.Dlatego, metoda ToString nie powinna zmieniać stanu obiektu i nie powinna zgłaszać wyjątków.

Konstruktory statyczne

Zgłaszanie wyjątków w konstruktorze statycznym powoduje brak możliwości użycia typu w bieżącej domenie aplikacji.Należy mieć bardzo dobry powód (na przykład z powodu zabezpieczeń), żeby zgłaszać wyjątek w konstruktorze statycznym.

Finalizatory

Zgłaszanie wyjątku w finalizatorze powoduje natychmiastowy błąd CLR, który usuwa proces.Dlatego, zawsze należy unikać zgłaszania wyjątków w finalizatorze.

Metody Dispose

Metoda IDisposable.Dispose nie powinna zgłaszać wyjątków.Metoda Dispose jest często wywoływana jako część logiki oczyszczania w klauzuli finally.Dlatego, jawne zgłaszanie wyjątku w metodzie Dispose zmusza użytkownika do dodania obsługi wyjątku wewnątrz klauzuli finally.

Ścieżka kodu Dispose(false) nigdy nie powinna zgłaszać wyjątków, ponieważ jest prawie zawsze wywoływana z finalizatora.

Operatory równości (==, !=)

Podobnie do metody Equals, operatory równości powinny zwrócić true lub false i nie powinny zgłaszać wyjątków.

Operatory niejawnego rzutowania

Ponieważ użytkownik jest często nieświadomy, że wywołany został niejawny operator rzutowania, wyjątek zgłoszony przez ten operator jest całkowicie nieoczekiwany.Dlatego, żadne wyjątki nie powinny być zgłaszane przez niejawne operatory rzutowania.

Jak naprawić naruszenia

W przypadku metod pobierających właściwości, zmień logikę, aby nie zgłaszała wyjątku albo zmień właściwość na metodę.

W przypadku wszystkich pozostałych typów metod wymienionych wcześniej, zmień logikę, aby nie musiała już zgłaszać wyjątków.

Kiedy pominąć ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie dotyczące tej reguły, jeżeli naruszenie było spowodowane deklaracją wyjątku, a nie zgłoszeniem wyjątku.

Powiązane reguły

CA2219: Nie zgłaszaj wyjątków w klauzulach wyjątków

Zobacz też

Inne zasoby

Ostrzeżenia projektu