Partager via


Avertissement CA1831 : utilisation d’AsSpan à la place d’indexeurs basés sur une plage pour une chaîne

La règle d’analyseur de code .NET CA1831 est activée par défaut à partir de .NET 5. Elle génère un avertissement de build pour tout code où un indexeur basé sur Range est utilisé sur une chaîne, mais qu’aucune copie n’a été prévue.

Description de la modification

À compter de .NET 5, le SDK .NET inclut des analyseurs de code source .NET. Plusieurs de ces règles sont activées par défaut, y compris CA1831. Si votre projet contient du code qui enfreint cette règle et est configuré pour traiter les avertissements comme des erreurs, cette modification peut interrompre votre build.

La règle CA1831 recherche les instances où un indexeur basé sur Range est utilisé sur une chaîne, mais qu’aucune copie n’a été prévue. Si l’indexeur basé sur Range est utilisé directement sur une chaîne pour produire un cast implicite, une copie inutile de la partie demandée de la chaîne est créée. Par exemple :

ReadOnlySpan<char> slice = str[1..3];

CA1831 suggère plutôt d’utiliser l’indexeur basé sur Range sur un intervalle de la chaîne. Par exemple :

ReadOnlySpan<char> slice = str.AsSpan()[1..3];

Version introduite

5,0

  • Pour corriger votre code et éviter les allocations inutiles, appelez AsSpan(String) ou AsMemory(String) avant d’utiliser l’indexeur basé sur Range. Par exemple :

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Si vous ne souhaitez pas modifier votre code, vous pouvez désactiver la règle en définissant sa gravité sur suggestion ou none. Pour plus d’informations, consultez Configurer des règles d’analyse du code.

  • Pour désactiver complètement l’analyse du code, définissez EnableNETAnalyzers sur false dans votre fichier projet. Pour plus d’informations, consultez EnableNETAnalyzers.

API affectées