Partager via


Avertissement CA1831 : Utiliser AsSpan au lieu des indexeurs basés sur la plage pour la chaîne de caractères

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 Kit de développement logiciel (SDK) . NET inclut des analyseurs de code source .NET. Plusieurs de ces règles sont activées, par défaut, notamment 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, cela entraîne la création d'une copie inutile de la portion demandée de la chaîne. Par exemple:

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

CA1831 suggère d’utiliser l’indexeur Range basé sur un segment de la chaîne, plutôt. 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