Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA1802 |
| Titel | Nach Möglichkeit Literale verwenden. |
| Kategorie | Leistung |
| Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
| Standardmäßig in .NET 10 aktiviert | No |
Ursache
Ein Feld wird als static und readonly (Shared und ReadOnly in Visual Basic) deklariert und mit einem Wert initialisiert, der zur Kompilierzeit berechenbar ist.
Standardmäßig werden mit dieser Regel nur extern sichtbare Felder überprüft, die statisch und schreibgeschützt sind, aber dies ist konfigurierbar.
Regelbeschreibung
Der Wert eines static readonly Felds wird zur Laufzeit berechnet, wenn der statische Konstruktor für den deklarierenden Typ aufgerufen wird. Wenn das Feld static readonly bei der Deklarierung initialisiert wird und kein statischer Konstruktor explizit deklariert wurde, gibt der Compiler einen statischen Konstruktor aus, um das Feld zu initialisieren.
Der Wert eines const Felds wird zur Kompilierungszeit berechnet und in den Metadaten gespeichert, wodurch die Laufzeitleistung verbessert wird, wenn es mit einem static readonly Feld verglichen wird.
Da der dem Zielfeld zugewiesene Wert zur Kompilierungszeit berechnet werden kann, ändern Sie die Deklaration in ein const Feld, sodass der Wert zur Kompilierungszeit statt zur Laufzeit berechnet wird.
Behandeln von Verstößen
Sie können einen Verstoß gegen diese Regel korrigieren, indem Sie die Modifizierer static und readonly durch den Modifizierer const ersetzen.
Hinweis
Die Verwendung des const-Modifizierers wird nicht für alle Szenarios empfohlen.
Wann sollten Warnungen unterdrückt werden?
Wenn die Leistung nicht relevant ist, können Warnungen für diese Regel bedenkenlos unterdrückt werden. Sie können die Regel in diesem Fall auch deaktivieren.
Warnung
Bei öffentlich oder extern sichtbaren Mitgliedern kann das Ändern von static readonly zu const zu Problemen führen.
const Werte werden zur Kompilierungszeit in abhängige Assemblys eingebettet, sodass Änderungen am Wert der Bibliothek möglicherweise nicht weitergegeben werden, was zu Fehlern führen kann. Wenn sich der Wert Ihres Mitglieds in Zukunft ändern kann, unterdrücken Sie diese Regel.
Hinweis
Die Verwendung von const ist für private-Mitglieder sicher und allgemein sicher für internal-Mitglieder, es sei denn, sie werden über InternalsVisibleTo oder separat bereitgestellt.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA1802
// The code that's violating the rule is on this line.
#pragma warning restore CA1802
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der none auf fest.
[*.{cs,vb}]
dotnet_diagnostic.CA1802.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.
Konfigurieren des zu analysierenden Codes
Mit den folgenden Optionen können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.
Sie können diese Optionen nur für diese Regel, für alle Regeln, für die sie gelten, oder für alle Regeln in dieser Kategorie (Leistung), für die sie gelten, konfigurieren. Weitere Informationen finden Sie unter Konfigurationsoptionen für die Codequalitätsregel.
Einschließen bestimmter API-Oberflächen
Sie können konfigurieren, in welchen Teilen Ihrer Codebasis je nach Barrierefreiheit diese Regel ausgeführt werden soll, indem Sie die Option api_surface festlegen. Sie können beispielsweise festlegen, dass die Regel nur für die nicht öffentliche API-Oberfläche ausgeführt werden soll, indem Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzufügen:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Hinweis
Ersetzen Sie den XXXX-Teil von CAXXXX durch die ID der anwendbaren Regel.
Erforderliche Modifizierer
Sie können diese Regel so konfigurieren, dass die erforderlichen Feldmodifizierer überschrieben werden. Standardmäßig sind die Modifizierer static und readonly für Felder erforderlich, die analysiert werden. Sie können diese mit einem oder mehreren Modifiziererwerten (durch Trennzeichen getrennt) aus der folgenden Tabelle überschreiben:
| Optionswert | Zusammenfassung |
|---|---|
none |
Keine Modifiziereranforderung |
static oder Shared |
Muss als static deklariert werden (Shared in Visual Basic) |
const |
Muss als const deklariert werden |
readonly |
Muss als readonly deklariert werden |
Sie können beispielsweise festlegen, dass die Regel für statische Felder und Instanzfelder ausgeführt werden soll, indem Sie einer EDITORCONFIG-Datei in Ihrem Projekt das folgende Schlüssel-Wert-Paar hinzufügen:
dotnet_code_quality.CA1802.required_modifiers = none
Beispiel
Das folgende Beispiel zeigt den Typ UseReadOnly, der gegen die Regel verstößt, und den Typ UseConstant, der sie erfüllt.
Imports System
Namespace ca1802
' This class violates the rule.
Public Class UseReadOnly
Shared ReadOnly x As Integer = 3
Shared ReadOnly y As Double = x + 2.1
Shared ReadOnly s As String = "readonly"
End Class
' This class satisfies the rule.
Public Class UseConstant
Const x As Integer = 3
Const y As Double = x + 2.1
Const s As String = "const"
End Class
End Namespace
// This class violates the rule.
public class UseReadOnly
{
static readonly int x = 3;
static readonly double y = x + 2.1;
static readonly string s = "readonly";
public void Print()
{
Console.WriteLine(s);
}
}
// This class satisfies the rule.
public class UseConstant
{
const int x = 3;
const double y = x + 2.1;
const string s = "const";
}