Sdílet prostřednictvím


Upozornění CA1831: Pro řetězec použijte asSpan místo indexerů založených na rozsahu.

Pravidlo analyzátoru kódu .NET CA1831 je ve výchozím nastavení povolené počínaje rozhraním .NET 5. Vygeneruje upozornění sestavení pro jakýkoli kód, ve Rangekterém se v řetězci používá indexer založený na základech, ale nebyla určena žádná kopie.

Změna popisu

Počínaje rozhraním .NET 5 obsahuje sada .NET SDK analyzátory zdrojového kódu .NET. Některé z těchto pravidel jsou ve výchozím nastavení povolené, včetně CA1831. Pokud váš projekt obsahuje kód, který porušuje toto pravidlo a je nakonfigurovaný tak, aby zacházel s upozorněními jako s chybami, může tato změna přerušit sestavení.

Pravidlo CA1831 vyhledá instance, ve kterých Rangese v řetězci používá indexer založený na bázi, ale nebyla zamýšlena žádná kopie. RangePokud je indexer založený na řetězci použit přímo na řetězci k vytvoření implicitního přetypování, vytvoří se nepotřebná kopie požadované části řetězce. Příklad:

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

CA1831 navrhuje místo toho použít Rangeindexer založený na rozsahu řetězce. Příklad:

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

Zavedená verze

5,0

  • Pokud chcete kód opravit a vyhnout se zbytečným přidělením, zavolejte AsSpan(String) nebo AsMemory(String) před použitím indexeru založeného na indexeru Range. Příklad:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Pokud nechcete změnit kód, můžete pravidlo zakázat nastavením jeho závažnosti na suggestion nebo none. Další informace najdete v tématu Konfigurace pravidel analýzy kódu.

  • Pokud chcete analýzu kódu úplně zakázat, nastavte EnableNETAnalyzers v false souboru projektu. Další informace naleznete v tématu EnableNETAnalyzers.

Ovlivněná rozhraní API