CA1861 : éviter les tableaux constants en tant qu’arguments

Propriété Value
Identificateur de la règle CA1861
Titre Éviter les tableaux constants en tant qu’arguments
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Un tableau constant de valeurs littérales est passé à une méthode via un appel régulier ou un appel de méthode d’extension.

Description de la règle

Les tableaux constants passés en tant qu’arguments ne sont pas réutilisés lorsqu’ils sont appelés à plusieurs reprises, ce qui implique qu’un nouveau tableau est créé à chaque fois. Si le tableau passé n’est pas muté dans la méthode appelée, envisagez de l’extraire dans un champ static readonly pour améliorer le niveau de performance.

Notes

Si la méthode appelée mute le tableau passé ou si vous n’êtes pas sûr que la méthode mute le tableau, n’extrayez pas le tableau dans un champ static readonly. Cela pourrait être un changement cassant. Dans ce cas, il est préférable de supprimer l’avertissement à la place.

Comment corriger les violations

Extrayez des tableaux constants dans des champs static readonly si le tableau passé n’est pas muté dans la méthode appelée.

L’exemple suivant montre une violation de la règle :

// A method argument
string message = string.Join(" ", new[] { "Hello", "world!" });
' A method argument
Dim message As String = String.Join(" ", {"Hello", "world!"})

L’exemple suivant montre comment la violation de cette règle est corrigée en extrayant l’argument dans un champ static readonly.

private static readonly string[] array = new[] { "Hello" , "world!" };

private string GetMessage()
{
    return string.Join(" ", array);
}
Private Shared ReadOnly array As String() = {"Hello", "world!"}

Private Function GetMessage() As String
    Return String.Join(" ", array)
End Function

À présent, la valeur du tableau est résolue au moment de la compilation plutôt qu’au moment de l’exécution, ce qui rend le code plus performant.

Quand supprimer les avertissements

Supprimez une violation de cette règle si :

  • L’appel ne s’exécute qu’une seule fois.
  • Le tableau peut être muté au sein de la méthode appelée ou vous n’êtes pas sûr qu’il mute.
  • Vous n’êtes pas préoccupé par l’impact sur le niveau de performance de la création d’un tableau constant pour chaque appel.

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

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

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