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 :
- Implémentez une méthode héritée qui utilise l’attribut ConstantExpectedAttribute, mais ne marquez pas votre paramètre avec ConstantExpectedAttribute.
- Transmettez un argument non constant à un paramètre qui a l’attribut ConstantExpectedAttribute.
- Transmettez un argument constant non valide à un paramètre qui a l’attribut ConstantExpectedAttribute.
- Transmettez un argument constant à un paramètre qui a l’attribut ConstantExpectedAttribute, et l’argument est hors de portée des valeurs Min ou Max.
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.