Partager via


CA1802 : Utilisez des littéraux quand cela est approprié

Propriété Value
Identificateur de la règle CA1802
Titre Utilisez des littéraux quand cela est approprié
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activée par défaut dans .NET 9 Non

Cause

Un champ est déclaré static et readonly (Shared et ReadOnly en Visual Basic) et est initialisé avec une valeur pouvant être compilée au moment de la compilation.

Par défaut, cette règle examine uniquement les champs visibles en externe, statiques et en lecture seule, mais elle est configurable.

Description de la règle

La valeur d’un champ static readonly est calculée au moment de l’exécution lorsque le constructeur statique du type déclarant est appelé. Si le champ static readonly est initialisé lorsqu’il est déclaré et qu’un constructeur statique n’est pas déclaré explicitement, le compilateur émet un constructeur statique pour initialiser le champ.

La valeur d’un champ const est calculée au moment de la compilation et stockée dans les métadonnées, ce qui améliore les performances d’exécution lorsqu’elle est comparée à un champ static readonly.

La valeur assignée au champ ciblé étant calculable au moment de la compilation, remplacez la déclaration par un champ const afin que la valeur soit calculée au moment de la compilation plutôt qu’à l’exécution.

Comment corriger les violations

Pour corriger une violation de cette règle, remplacez les modificateurs static et readonly par le modificateur const.

Notes

L’utilisation du modificateur const n’est pas recommandée pour tous les scénarios.

Quand supprimer les avertissements

Si les performances ne constituent pas un problème, vous pouvez supprimer un avertissement de cette règle ou la désactiver en toute sécurité.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Configurer le code à analyser

Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.

Vous pouvez configurer ces options pour cette règle uniquement, pour toutes les règles auxquelles elle s’applique ou pour toutes les règles de cette catégorie (Performances) auxquelles elle s’applique. Pour plus d’informations, consultez Options de configuration des règles de qualité du code.

Inclure des surfaces d’API spécifiques

Vous pouvez configurer les parties de votre codebase sur lesquelles exécuter cette règle, en fonction de leur accessibilité. Par exemple, pour spécifier que la règle doit s’exécuter uniquement sur la surface d’API non publique, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :

dotnet_code_quality.CAXXXX.api_surface = private, internal

Modificateurs requis

Vous pouvez configurer cette règle pour remplacer les modificateurs de champ requis. Par défaut, static et readonly sont deux modificateurs obligatoires pour les champs analysés. Vous pouvez remplacer ces modificateurs par une ou plusieurs valeurs de modificateurs séparées par des virgules provenant du tableau ci-dessous :

Valeur d’option Récapitulatif
none Aucune exigence de modificateur.
static ou Shared Doit être déclaré en tant que « statique » (« Partagé » en Visual Basic).
const Doit être déclaré en tant que « const ».
readonly Doit être déclaré en tant que « readonly ».

Par exemple, pour spécifier que la règle doit s’exécuter sur des champs statiques et d’instance, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :

dotnet_code_quality.CA1802.required_modifiers = none

Exemple

L’exemple suivant montre un type, UseReadOnly, qui enfreint la règle et un type, UseConstant, conforme à la règle.

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