CA2201: Nie wywołuj zastrzeżonych typów wyjątków

Właściwości Wartość
Identyfikator reguły CA2201
Stanowisko Nie zgłaszaj wyjątków o zastrzeżonych typach
Kategoria Użycie
Poprawka powodująca niezgodność lub niezgodność Kluczowa
Domyślnie włączone na platformie .NET 8 Nie.

Przyczyna

Metoda zgłasza typ wyjątku, który jest zbyt ogólny lub zarezerwowany przez środowisko uruchomieniowe.

Opis reguły

Następujące typy wyjątków są zbyt ogólne, aby dostarczyć użytkownikowi wystarczające informacje:

Następujące typy wyjątków są zarezerwowane i powinny być zgłaszane tylko przez środowisko uruchomieniowe języka wspólnego:

Nie zgłaszaj ogólnych wyjątków

Jeśli zgłosisz ogólny typ wyjątku, taki jak Exception lub SystemException, w bibliotece lub strukturze, wymusza na użytkownikach przechwycenie wszystkich wyjątków, w tym nieznanych wyjątków, które nie wiedzą, jak obsługiwać.

Zamiast tego należy zgłosić bardziej pochodny typ, który już istnieje w strukturze, lub utworzyć własny typ pochodzący z klasy Exception.

Zgłaszanie określonych wyjątków

W poniższej tabeli przedstawiono wyjątek zgłaszany dla różnych typów nieprawidłowych argumentów, w tym parametr wartości w set metodzie dostępu do właściwości.

Nieprawidłowy argument Wyjątek
null Odwołanie ArgumentNullException
Poza dozwolonym zakresem wartości (np. indeksem kolekcji lub listy) ArgumentOutOfRangeException
Nieprawidłowa enum wartość InvalidEnumArgumentException
Zawiera format, który nie spełnia specyfikacji parametrów metody (na przykład ciąg formatu dla ToString(String)elementu ) FormatException
W przeciwnym razie jest to nieprawidłowe ArgumentException

W poniższej tabeli przedstawiono wyjątek zgłaszany dla różnych typów nieprawidłowych operacji.

Nieprawidłowa operacja Wyjątek
Operacja jest nieprawidłowa dla bieżącego stanu obiektu. InvalidOperationException
Operacja jest wykonywana na obiekcie, który został usunięty. ObjectDisposedException
Operacja nie jest obsługiwana (na przykład w przesłoniętym Stream.Write strumieniu otwartym do odczytu). NotSupportedException
Konwersja spowoduje przepełnienie (na przykład w jawnym przeciążeniu operatora rzutowania). OverflowException

W przypadku wszystkich innych sytuacji należy rozważyć utworzenie własnego typu, który pochodzi z Exception i zgłosić go.

Jak naprawić naruszenia

Aby naprawić naruszenie tej reguły, zmień typ zgłaszanego wyjątku na określony typ, który nie jest jednym z typów zarezerwowanych.

Kiedy pomijać ostrzeżenia

Nie pomijaj ostrzeżeń dla tej reguły.