Freigeben über


CA2201: Keine reservierten Ausnahmetypen auslösen.

Eigenschaft Wert
Regel-ID CA2201
Titel Keine reservierten Ausnahmetypen auslösen.
Kategorie Verwendung
Fix führt oder führt nicht zur Unterbrechung Breaking
Standardmäßig in .NET 9 aktiviert No

Ursache

Eine Methode löst einen Ausnahmetyp aus, der zu allgemein oder von der Runtime reserviert ist.

Regelbeschreibung

Die folgenden Ausnahmetypen sind zu allgemein, um dem Benutzer ausreichende Informationen bereitzustellen:

Die folgenden Ausnahmetypen sind reserviert und sollten nur von Common Language Runtime ausgelöst werden:

Keine allgemeinen Ausnahmen auslösen

Wenn Sie in einer Bibliothek oder einem Framework einen allgemeinen Ausnahmetyp auslösen, z. B. Exception oder SystemException, erzwingt dies, dass Consumer alle Ausnahmen abfangen, einschließlich unbekannter Ausnahmen, mit denen sie nicht umgehen können.

Stattdessen lösen Sie entweder einen stärker abgeleiteten Typ aus, der bereits im Framework vorhanden ist, oder erstellen Sie einen eigenen Typ, der von Exception abgeleitet wird.

Spezifische Ausnahmen auslösen

Die folgende Tabelle zeigt, welche Ausnahme für verschiedene Typen ungültiger Argumente ausgelöst werden soll, einschließlich des value-Parameters in der set-Zugriffsmethode einer Eigenschaft.

Ungültiges Argument Ausnahme
null Verweis ArgumentNullException
Außerhalb des zulässigen Wertebereichs (z. B. ein Index für eine Auflistung oder Liste) ArgumentOutOfRangeException
Ungültiger enum-Wert InvalidEnumArgumentException
Enthält ein Format, das den Parameterspezifikationen einer Methode (z. B. die Formatzeichenfolge für ToString(String)) nicht entspricht FormatException
Andernfalls ungültig ArgumentException

Die folgende Tabelle zeigt, welche Ausnahme für verschiedene Typen ungültiger Vorgänge ausgelöst werden soll.

Ungültiger Vorgang Ausnahme
Der Vorgang ist für den aktuellen Zustand eines Objekts ungültig. InvalidOperationException
Der Vorgang wird für ein Objekt durchgeführt, das verworfen wurde. ObjectDisposedException
Der Vorgang wird nicht unterstützt (z. B. in einem überschriebenen Stream.Write in einem zum Lesen geöffneten Stream). NotSupportedException
Eine Konvertierung würde zu einem Überlauf führen (z. B. in einer Überladung des expliziten Umwandlungsoperators). OverflowException

In allen anderen Situationen sollten Sie einen eigenen Typ erstellen, der von Exception abgeleitet ist und diesen auslösen.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, ändern Sie den Typ der ausgelösten Ausnahme in einen bestimmten Typ, bei dem es sich nicht um einen der reservierten Typen handelt.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie keine Warnung dieser Regel.