CA1857 : le paramètre attend une constante pour des performances optimales

Propriété Value
Identificateur de la règle CA1857
Titre Le paramètre attend une constante pour des performances optimales
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 À titre d’avertissement

Cause

Un argument non valide est passé à un paramètre annoté avec ConstantExpectedAttribute.

Description de la règle

Cette règle signale les emplacements dans votre code où vous :

Comment corriger les violations

Corrigez votre code comme indiqué par le message d’erreur spécifique que vous recevez.

Exemple 1 (attribut attendu)

L’extrait de code suivant montre une violation de CA1857 :

public interface I1<T>
{
    T M1(T operand1, [ConstantExpected] T operand2);
}

public class C1 : I1<int>
{
    public int M1(int operand1, int operand2) =>
        throw new NotImplementedException();
}

L’extrait de code suivant corrige la violation :

public interface I1<T>
{
    T M1(T operand1, [ConstantExpected] T operand2);
}

public class C1 : I1<int>
{
    public int M1(int operand1, [ConstantExpected] int operand2) =>
        throw new NotImplementedException();
}

Exemple 2 (constante non constante)

L’extrait de code suivant montre une violation de CA1857 :

static void M1(int i) => M2(i);
static void M2([ConstantExpected] int i) { }

L’extrait de code suivant corrige la violation :

static void M1([ConstantExpected] int i) => M2(i);
static void M2([ConstantExpected] int i) { }

Exemple 3 (constante non valide)

L’extrait de code suivant montre une violation de CA1857 :

static void M1() => M2((string)(object)20);
static void M2([ConstantExpected] string s) { }

L’extrait de code suivant corrige la violation :

static void M1() => M2("20");
static void M2([ConstantExpected] string s) { }

Exemple 4 (constante hors limites)

L’extrait de code suivant montre une violation de CA1857 :

static void M1() => M2(5);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }

L’extrait de code suivant corrige la violation :

static void M1() => M2(4);
static void M2([ConstantExpected(Min = 3, Max = 4)] int i) { }

Quand supprimer les avertissements

Vous pouvez sans risque supprimer un avertissement de cette règle si les performances ne constituent pas un problème.

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 CA1857
// The code that's violating the rule is on this line.
#pragma warning restore CA1857

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.CA1857.severity = none

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