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 8 aktiviert | Nein |
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:
- System.AccessViolationException
- System.ExecutionEngineException
- System.IndexOutOfRangeException
- System.NullReferenceException
- System.OutOfMemoryException
- System.Runtime.InteropServices.COMException
- System.Runtime.InteropServices.ExternalException
- System.Runtime.InteropServices.SEHException
- System.StackOverflowException
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.