Verwendungswarnungen

Verwendungswarnungen tragen zur richtigen Verwendung von .NET Framework bei.

In diesem Abschnitt

Regel

Beschreibung

CA1801: Nicht verwendete Parameter überprüfen

Eine Methodensignatur enthält einen Parameter, der nicht im Methodentext verwendet wird.

CA1806: Methodenergebnisse nicht ignorieren

Ein neues Objekt wird erstellt, aber nie verwendet, oder eine Methode wird aufgerufen, die eine neue Zeichenfolge erstellt und zurückgibt, die nie verwendet wird, oder eine COM-Methode oder P/Invoke-Methode gibt ein HRESULT oder einen Fehlercode zurück, das oder der nie verwendet wird.

CA1816: GC.SuppressFinalize korrekt aufrufen

Eine Methode, die eine Implementierung von Dispose bildet, ruft nicht GC.SuppressFinalize auf, oder eine Methode, die keine Implementierung von Dispose bildet, ruft GC.SuppressFinalize auf, oder eine Methode ruft GC.SuppressFinalize auf und übergibt ein anderes Element als dieses (Me in Visual Basic).

CA2200: Erneut ausführen, um Stapeldetails beizubehalten

Eine Ausnahme wird erneut ausgelöst, und die Ausnahme wird in der throw-Anweisung explizit angegeben.Wenn eine Ausnahme durch Angeben der Ausnahme in der throw-Anweisung erneut ausgelöst wird, geht die Liste der Methoden, die zwischen der Methode, durch die die Ausnahme ursprünglich ausgelöst wurde, und der aktuellen Methode aufgerufen wurden, verloren.

CA2201: Keine reservierten Ausnahmetypen auslösen

Dadurch ist der ursprüngliche Fehler nur schwer zu erkennen und zu debuggen.

CA2202: Objekte nicht mehrmals verwerfen

Eine Methodenimplementierung enthält Codepfade, die für dasselbe Objekt mehrere Aufrufe von System.IDisposable.Dispose oder einer Entsprechung von Dispose (z. B. einer Close()-Methode für bestimmte Typen) verursachen können.

CA2204: Literale sollten eine korrekte Rechtschreibung aufweisen

Ein Zeichenfolgenliteral in einem Methodentext enthält mindestens ein Wort, das von der Rechtschreibprüfung aus der Microsoft-Bibliothek nicht erkannt wird.

CA2205: Verwaltete Entsprechungen der Win32 API verwenden

Eine Plattformaufrufmethode ist definiert, und in der .NET Framework-Klassenbibliothek ist eine Methode mit der entsprechenden Funktionalität vorhanden.

CA2207: Statische Felder für Werttyp inline initialisieren

Ein Werttyp deklariert einen expliziten statischen Konstruktor.Um einen Verstoß gegen diese Regel zu beheben, initialisieren Sie alle statischen Daten nach deren Deklaration und entfernen den statischen Konstruktor.

CA2208: Argumentausnahmen korrekt instanziieren

Der (parameterlose) Standardkonstruktor eines Ausnahmetyps wird aufgerufen, der ArgumentException ist oder davon abgeleitet wird, oder ein falsches Zeichenfolgenargument wird an einen parametrisierten Konstruktor eines Ausnahmetyps übergeben, der ArgumentException ist oder davon abgeleitet wird.

CA2211: Nicht konstante Felder sollten nicht sichtbar sein

Statische Felder, die weder konstant noch schreibgeschützt sind, sind nicht threadsicher.Der Zugriff auf ein solches Feld muss sorgfältig kontrolliert werden und erfordert fortgeschrittene Programmiertechniken zur Synchronisierung des Zugriffs auf das Klassenobjekt.

CA2212: ServicedComponents nicht mit WebMethod markieren

Eine Methode in einem Typ, der von System.EnterpriseServices.ServicedComponent erbt, wird mit System.Web.Services.WebMethodAttribute markiert.Da das Verhalten von WebMethodAttribute und einer ServicedComponent-Methode sowie deren Anforderungen an den Kontext sowie den Transaktionsablauf zu Konflikten führen, ist das Verhalten der Methode in bestimmten Szenarien fehlerhaft.

CA2213: Verwerfbare Felder verwerfen

Ein Typ, der System.IDisposable implementiert, deklariert Felder von Typen, die ebenfalls IDisposable implementieren.Die Dispose-Methode des Felds wird nicht von der Dispose-Methode des deklarierenden Typs aufgerufen.

CA2214: Überschreibbare Methoden in Konstruktoren nicht aufrufen

Wenn ein Konstruktor eine virtuelle Methode aufruft, wurde möglicherweise der Konstruktor für die Instanz, von der die Methode aufgerufen wird, nicht ausgeführt.

CA2215: Dispose-Methoden müssen die Dispose-Funktion der Basisklasse aufrufen

Wenn ein Typ von einem Typ erbt, der verworfen werden kann, muss von seiner Dispose-Methode die Dispose-Methode des Basistyps aufgerufen werden.

CA2216: Verwerfbare Typen sollten einen Finalizer deklarieren

Ein Typ, der System.IDisposable implementiert und Felder besitzt, bei denen die Verwendung nicht verwalteter Ressourcen empfohlen wird, implementiert keinen Finalizer wie von Object.Finalize beschrieben.

CA2217: Enumerationen nicht mit FlagsAttribute markieren

Eine extern sichtbare Enumeration wird mit FlagsAttribute gekennzeichnet und weist einen oder mehrere Werte auf, die keine Potenzen von 2 und keine Kombination von anderen in der Enumeration definierten Werten bilden.

CA2218: GetHashCode beim Überschreiben von Equals überschreiben

GetHashCode gibt einen Wert auf der Grundlage der aktuellen Instanz zurück, die sich für Hashalgorithmen und Datenstrukturen eignet, z. B. für eine Hashtabelle.Zwei Objekte, die denselben Typ aufweisen und gleich sind, müssen den gleichen Hashcode zurückgeben.

CA2219: Keine Ausnahmen in Ausnahmeklauseln auslösen

Wenn eine Ausnahme in einer finally-Klausel oder fault-Klausel ausgelöst wird, wird die aktive Ausnahme von der neuen Ausnahme verdeckt.Wenn eine Ausnahme in einer filter-Klausel ausgelöst wird, fängt die Laufzeit die Ausnahme automatisch ab.Dadurch ist der ursprüngliche Fehler nur schwer zu erkennen und zu debuggen.

CA2220: Finalizer sollten Basisklassen-Finalizer aufrufen

Der Abschluss muss durch die Vererbungshierarchie weitergegeben werden.Um dies zu garantieren, müssen die Typen die Finalize-Methode ihrer Basisklasse in der eigenen Finalize-Methode aufrufen.

CA2221: Finalizer sollten geschützt sein

Finalizer müssen den Familienzugriffsmodifizierer verwenden.

CA2222: Sichtbarkeit für geerbte Member nicht verringern

Sie sollten den Zugriffsmodifizierer für geerbte Member nicht ändern.Wenn Sie einen geerbten Member in private ändern, werden Aufrufer nicht am Zugriff auf die Implementierung der Basisklasse der Methode gehindert.

CA2223: Member sollten sich durch mehr als nur den Rückgabetyp unterscheiden

Die Common Language Runtime lässt die Verwendung von Rückgabetypen zu, mit deren Hilfe zwischen anderweitig identischen Membern unterschieden werden kann. Trotzdem ist diese Funktion nicht in der Common Language Specification (CLS) enthalten und keine gebräuchliche Funktion von .NET-Programmiersprachen.

CA2224: Equals beim Überladen von Gleichheitsoperatoren überschreiben

Ein öffentlicher Typ implementiert den Gleichheitsoperator, überschreibt jedoch Object.Equals nicht.

CA2225: Operatorüberladungen weisen benannte Alternativen auf

Es wurde eine Operatorüberladung erkannt, und die erwartete benannte Alternativmethode wurde nicht gefunden.Der benannte Alternativmember gewährt auf die gleiche Funktionalität wie der Operator Zugriff und wird für Entwickler bereitgestellt, die in Sprachen programmieren, in denen überladene Operatoren nicht unterstützt werden.

CA2226: Operatoren sollten symmetrische Überladungen aufweisen

Ein Typ implementiert den Gleichheits- oder Ungleichheitsoperator, ohne den entgegengesetzten Operator zu implementieren.

CA2227: Auflistungseigenschaften sollten schreibgeschützt sein

Eine schreibbare Auflistungseigenschaft ermöglicht es Benutzern, die Auflistung durch eine andere Auflistung zu ersetzen.Eine schreibgeschützte Eigenschaft sorgt dafür, dass die Auflistung nicht mehr ersetzt wird, lässt aber dennoch das Festlegen einzelner Member zu.

CA2228: Nicht freigegebene Ressourcenformate nicht veröffentlichen

Ressourcendateien, die mithilfe von Vorabversionen von .NET Framework erstellt wurden, können von den unterstützten Versionen von .NET Framework möglicherweise nicht verwendet werden.

CA2229: Serialisierungskonstruktoren implementieren

Um einen Verstoß gegen diese Regel zu beheben, implementieren Sie den Serialisierungskonstruktor.Definieren Sie den Konstruktor bei einer versiegelten Klasse als privaten Konstruktor. Definieren Sie ihn andernfalls als geschützten Konstruktor.

CA2230: params für Variablenargumente verwenden

Ein öffentlicher oder geschützter Typ enthält eine öffentliche oder geschützte Methode, die statt des params-Schlüsselworts die VarArgs-Aufrufkonvention verwendet.

CA2231: Überladen Sie den Gleichheitsoperator beim Überschreiben von ValueType.Equals

Ein Werttyp überschreibt Object.Equals, implementiert jedoch nicht den Gleichheitsoperator.

CA2232: Windows Forms-Einstiegspunkte mit STAThread markieren

STAThreadAttribute gibt an, dass das COM-Threadingmodell für die Anwendung ein Singlethread-Apartment ist.Dieses Attribut muss am Einstiegspunkt jeder Anwendung vorhanden sein, die Windows Forms verwendet. Wird es weggelassen, funktionieren die Windows-Komponenten eventuell nicht richtig.

CA2233: Vorgänge sollten nicht überlaufen

Arithmetische Operationen sollten erst nach einer Validierung der Operanden ausgeführt werden, um sicherzustellen, dass das Ergebnis der Operation nicht außerhalb des Bereichs möglicher Werte der beteiligten Datentypen liegt.

CA2234: Übergeben Sie System.Uri-Objekte anstelle von Zeichenfolgen

Eine Methode wird aufgerufen, die über einen Zeichenfolgenparameter verfügt, dessen Name "uri", "URI", "urn", "URN", "url" oder "URL" enthält.Der deklarierende Typ der Methode enthält eine entsprechende Methodenüberladung, die über einen System.Uri-Parameter verfügt.

CA2235: Alle nicht serialisierbaren Felder markieren

Ein Instanzenfeld eines Typs, der nicht serialisierbar ist, ist in einem serialisierbaren Typ deklariert.

CA2236: Basisklassenmethoden auf ISerializable-Typen aufrufen

Um einen Verstoß gegen diese Regel zu beheben, rufen Sie die GetObjectData-Methode oder den Serialisierungskonstruktor des Basistyps in der Methode oder im Konstruktor des entsprechenden abgeleiteten Typs auf.

CA2237: Markieren von ISerializable-Typen mit SerializableAttribute

Damit Typen von der Common Language Runtime als serialisierbar erkannt werden, müssen sie mit dem SerializableAttribute-Attribut markiert werden, auch wenn der Typ durch die Implementierung der ISerializable-Schnittstelle eine benutzerdefinierte Serialisierungsroutine verwendet.

CA2238: Serialisierungsmethoden korrekt implementieren

Eine Methode, die ein Serialisierungsereignis behandelt, verfügt nicht über die richtige Signatur, den richtigen Rückgabetyp oder die richtige Sichtbarkeit.

CA2239: Deserialisierungsmethoden für optionale Felder angeben

Ein Typ verfügt über ein Feld, das mit dem System.Runtime.Serialization.OptionalFieldAttribute-Attribut gekennzeichnet ist, und gibt keine Methoden für die Deserialisierungsereignisbehandlung an.

CA2240: ISerializable ordnungsgemäß implementieren

Um einen Verstoß gegen diese Regel zu beheben, stellen Sie sicher, dass die GetObjectData-Methode sichtbar und überschreibbar ist und dass alle Instanzenfelder in den Serialisierungsprozess einbezogen werden oder explizit mit dem NonSerializedAttribute-Attribut markiert sind.

CA2241: Geeignete Argumente für Formatierungsmethoden angeben

Das an System.String.Format übergebene format-Argument enthält keine Formatelemente, die den einzelnen Objektargumenten entsprechen oder umgekehrt.

CA2242: Ordnungsgemäß auf NaN testen

Mit diesem Ausdruck testen Sie einen Wert auf Single.Nan oder Double.Nan.Testen Sie den Wert mithilfe von Single.IsNan(Single) oder Double.IsNan(Double).

CA2243: Attribute-Zeichenfolgenliterale müssen stets richtig analysiert werden

Der Parameter eines Zeichenfolgenliterals für ein Attribut wird für eine URL, GUID oder Version nicht ordnungsgemäß analysiert.