Nutzungsregeln
Nutzungsregeln unterstützen die ordnungsgemäße Verwendung von .NET.
In diesem Abschnitt
Regel | Beschreibung |
---|---|
CA1801: Nicht verwendete Parameter überprüfen. | Eine Methodensignatur enthält einen Parameter, der nicht im Methodentext verwendet wird. |
CA1816: GC.SuppressFinalize korrekt aufrufen. | Eine Methode, bei der es sich um eine Implementierung von Verwerfung handelt, ruft nicht GC.SuppressFinalize auf, oder eine Methode, die keine Implementierung von Dispose ist, ruft GC.SuppressFinalize auf, oder eine Methode ruft GC.SuppressFinalize auf und übergibt etwas anderes als this (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. |
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. |
CA2213: Verwerfbare Felder verwerfen. | Ein Typ, der System.IDisposable implementiert, deklariert Felder, die auch 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 verwerfbaren Typ erbt, muss er von seiner eigenen Dispose -Methode die Dispose -Methode des Basistyps aufrufen. |
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. | Ein öffentlicher Typ überschreibt System.Object.Equals, jedoch nicht System.Object.GetHashCode. |
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. |
CA2224: Equals beim Überladen von Gleichheitsoperatoren überschreiben. | Ein öffentlicher Typ implementiert den Gleichheitsoperator, überschreibt System.Object.Equals jedoch 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: Sammlungseigenschaften 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. |
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. |
CA2231: Überladen Sie den Gleichheitsoperator beim Überschreiben von ValueType.Equals. | Ein Werttyp überschreibt Object.Equals , implementiert jedoch nicht den Gleichheitsoperator. |
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. |
CA2237: ISerializable-Typen mit SerializableAttribute markieren. | 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. |
CA2241: Geben Sie die korrekte Anzahl für Formatierungsmethoden an. | Das an String.Format übergebene format-Argument enthält keine Formatelemente, die den einzelnen Objektargumenten entsprechen oder umgekehrt. |
CA2242: Ordnungsgemäß auf NaN testen. | Dieser Ausdruck testet einen Wert anhand von Single.Nan oder Double.Nan . Verwenden Sie Single.IsNan(Single) oder Double.IsNan(Double) , um den Wert zu testen. |
CA2243: Attribute-Zeichenfolgenliterale müssen stets richtig analysiert werden. | Der Parameter des Zeichenfolgenliterals eines Attributs wird für eine URL, GUID oder Version nicht ordnungsgemäß analysiert. |
CA2244: Keine Initialisierungen indizierter Elemente duplizieren | Ein Objektinitialisierer verfügt über mehr als einen indizierten Elementinitialisierer mit demselben konstanten Index. Alle bis auf den letzten Initialisierer sind redundant. |
CA2245: Keine Zuweisung einer Eigenschaft zu sich selbst | Eine Eigenschaft wurde versehentlich sich selbst zugewiesen. |
CA2246: Keine Zuweisung eines Symbols und seines Members in der gleichen Anweisung | Es wird nicht empfohlen, ein Symbol und sein Member, d. h. ein Feld oder eine Eigenschaft, in der gleichen Anweisung zuzuweisen. Es ist nicht eindeutig, ob für den Memberzugriff der alte Wert des Symbols vor der Zuweisung oder der neu zugewiesene Wert in dieser Anweisung verwendet werden soll. |
CA2247: Anstelle einer TaskContinuationOptions-Enumeration muss eine TaskCreationOptions-Enumeration als Argument an den TaskCompletionSource-Konstruktor übergeben werden. | TaskCompletionSource verfügt über Konstruktoren, die TaskCreationOptions verwenden, welche die zugrunde liegende Aufgabe steuern, und Konstruktoren, die den Objektzustand annehmen, der in der Aufgabe gespeichert ist. Das versehentliche übergeben von TaskContinuationOptions anstelle von TaskCreationOptions führt dazu, dass der Aufruf die Optionen als Zustand behandelt. |
CA2248: Geben Sie das richtige „Enum“-Argument für „Enum.HasFlag“ an | Der Enumerationstyp, der als Argument an den HasFlag -Methodenaufruf übergeben wird, unterscheidet sich vom aufrufenden Enumerationstyp. |
CA2249: Erwägen Sie die Verwendung von "String.Contains" anstelle von "String.IndexOf" | Aufrufe von string.IndexOf , bei denen das Ergebnis verwendet wird, um zu überprüfen, ob ein Substring vorhanden oder nicht vorhanden ist, können durch string.Contains ersetzt werden. |
CA2250: ThrowIfCancellationRequested verwenden |
ThrowIfCancellationRequested überprüft automatisch, ob das Token abgebrochen wurde, und löst eine OperationCanceledException aus, falls dies der Fall ist. |
CA2251: String.Equals anstelle von String.Compare verwenden |
Die Verwendung von String.Equals ist klarer und wahrscheinlich schneller, anstatt das Ergebnis von String.Compare mit 0 (null) zu vergleichen. |
CA2252: Vorschaufeatures abonnieren | Abonnieren Sie Vorschaufeatures, bevor Sie Vorschau-APIs verwenden. |
CA2253: Benannte Platzhalter dürfen keine numerischen Werte sein | Benannte Platzhalter in der Vorlage für Protokollierungsnachrichten dürfen nicht nur aus numerischen Zeichen bestehen. |
CA2254: Vorlage muss ein statischer Ausdruck sein | Die Vorlage für Protokollierungsnachrichten darf nicht zwischen Aufrufen variieren. |
CA2255: Attribut ModuleInitializer nicht in Bibliotheken verwenden |
Modulinitialisierer sind zur Verwendung im Anwendungscode vorgesehen, um die Initialisierung der Anwendungskomponenten sicherzustellen, bevor der Anwendungscode mit der Ausführung beginnt. |
CA2256: Alle in übergeordneten Schnittstellen deklarierten Member müssen über eine Implementierung in einer Schnittstelle mit dem Attribut „DynamicInterfaceCastableImplementation“ verfügen | Typen, denen das Attribut DynamicInterfaceCastableImplementationAttribute zugeordnet wird, fungieren als Schnittstellenimplementierung für einen Typ, der den IDynamicInterfaceCastable -Typ implementiert. Daher muss er eine Implementierung aller in den geerbten Schnittstellen definierten Member bereitstellen, weil der Typ, der IDynamicInterfaceCastable implementiert, sie andernfalls nicht bereitstellt. |
CA2257: Die für eine Schnittstelle mit dem „DynamicInterfaceCastableImplementationAttribute“ definierten Member müssen „static“ sein | Da ein Typ, der IDynamicInterfaceCastable implementiert, keine dynamische Schnittstelle in Metadaten implementieren kann, schlagen Aufrufe eines Instanz-Schnittstellenmembers, das keine explizite Implementierung ist, die für diesen Typ definiert ist, zur Laufzeit fehl. Markieren Sie neue Schnittstellenmember als static , um Laufzeitfehler zu vermeiden. |
CA2258: Die Bereitstellung einer „DynamicInterfaceCastableImplementation“-Schnittstelle in Visual Basic wird nicht unterstützt | Für das Bereitstellen einer funktionalen Schnittstelle mit zugeordnetem DynamicInterfaceCastableImplementationAttribute -Attribut ist das Feature Standardschnittstellen-Member erforderlich, das in Visual Basic nicht unterstützt wird. |
CA2259: Sicherstellen, dass ThreadStatic nur mit statischen Feldern verwendet wird |
ThreadStaticAttribute wirkt sich nur auf Shared -Felder (static in Visual Basic) aus. Wenn es auf Instanzfelder angewendet wird, besitzt das Attribut keine Auswirkungen auf das Verhalten. |
CA2260: Korrekte Implementierung generischer mathematischer Schnittstellen | Generische mathematische Schnittstellen erfordern, dass der abgeleitete Typ selbst für den sich wiederholenden Typparameter verwendet wird. |
CA2261: Nicht verwenden ConfigureAwaitOptions.SuppressThrowing mit Task<TResult> |
Die ConfigureAwaitOptions.SuppressThrowing Option wird von der generischen Task<TResult> -Option nicht unterstützt, da dies zu einer ungültigen TResult -Wiedergabe führen kann. |
CA2262: Legen Sie MaxResponseHeadersLength ordnungsgemäß fest. |
Stellen Sie sicher, dass der Wert MaxResponseHeadersLength korrekt angegeben wird. Dieser Wert wird in Kilobyte gemessen. |
CA2264: Übergeben Sie keinen nicht nullfähigen Wert an 'ArgumentNullException.ThrowIfNull' | 'ArgumentNullException.ThrowIfNull' wird ausgelöst, wenn das übergebene Argument "null" ist. Bestimmte Konstrukte wie nicht nullable Structs, und 'nameof()' und 'new' Ausdrücke sind bekannt, dass nie Null sein, sodass 'ArgumentNullException.ThrowIfNull' niemals ausgelöst wird. |
CA2265: Nicht vergleichen Span<T> null mit oder default |
Vergleichen sie eine Spanne mit null oder default machen sie möglicherweise nicht, was Sie beabsichtigt haben. default und das null Literal wird implizit in Span<T>.Empty . |
CA2263: Generische Überladung bevorzugen, wenn der Typ bekannt ist | Die Verwendung einer generischen Überladung empfiehlt es sich, ein System.Type Argument zu übergeben, wenn der Typ bekannt ist, da sie übersichtlicheren und typsichereren Code mit verbesserten Kompilierungszeitprüfungen fördern. |
Zusammenarbeit auf GitHub
Die Quelle für diesen Inhalt finden Sie auf GitHub, wo Sie auch Issues und Pull Requests erstellen und überprüfen können. Weitere Informationen finden Sie in unserem Leitfaden für Mitwirkende.