Megosztás a következőn keresztül:


CA1802: Szükség esetén literálok használata

Tulajdonság Érték
Szabályazonosító CA1802
Cím Szükség esetén literálok használata
Kategória Teljesítmény
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A mező deklarálva static van és readonly (Shared és ReadOnly a Visual Basicben), és inicializálva van egy olyan értékkel, amely fordításkor kiszámítható.

Ez a szabály alapértelmezés szerint csak külsőleg látható, statikus, olvasható mezőket tekint meg, de ez konfigurálható.

Szabály leírása

A mező értékét static readonly futásidőben számítja ki a rendszer, amikor meghívja a deklarálási típus statikus konstruktorát. Ha a static readonly mező inicializálva van a deklarálásakor, és a statikus konstruktor nincs explicit módon deklarálva, a fordító egy statikus konstruktort bocsát ki a mező inicializálásához.

A mezők értékét const fordításkor számítják ki, és a metaadatokban tárolják, ami javítja a futásidejű teljesítményt egy static readonly mezőhöz képest.

Mivel a megcélzott mezőhöz rendelt érték fordításkor megbízható, módosítsa a deklarációt egy const mezőre, hogy az érték fordítási időpontban legyen kiszámítva a futási idő helyett.

Szabálysértések kijavítása

A szabály megsértésének kijavításához cserélje le a módosítókat és readonly a static módosítókat a const módosítóra.

Megjegyzés:

A const modifier használata nem ajánlott minden esetben.

Mikor kell letiltani a figyelmeztetéseket?

Biztonságosan letilthatja a szabály figyelmeztetését, vagy letilthatja a szabályt, ha a teljesítmény nem aggasztó.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA1802
// The code that's violating the rule is on this line.
#pragma warning restore CA1802

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA1802.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítások segítségével konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezeket a beállításokat konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában (Teljesítmény) érvényes összes szabályra. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Kötelező módosítók

Ezt a szabályt úgy konfigurálhatja, hogy felülbírálja a szükséges mezőmódosítókat. Alapértelmezés szerint mindkettő staticreadonly kötelező módosító az elemzett mezőkhöz. Ezt felülbírálhatja egy vesszővel elválasztva, amely egy vagy több módosító értéket tartalmaz az alábbi táblázatból:

Beállítás értéke Összesítés
none Nincs módosító követelmény.
static vagy Shared A Visual Basicben "statikusként" ("Megosztott") kell deklarálni.
const "const"-ként kell deklarálni.
readonly "olvashatóként" kell deklarálni.

Ha például meg szeretné adni, hogy a szabály statikus és példánymezőkön is fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CA1802.required_modifiers = none

Példa

Az alábbi példa egy olyan típust mutat be, UseReadOnlyamely megsérti a szabályt, és egy olyan típust, UseConstantamely megfelel a szabálynak.

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";
}