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ő static
readonly
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, UseReadOnly
amely megsérti a szabályt, és egy olyan típust, UseConstant
amely 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";
}
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: