Udostępnij za pośrednictwem


Ostrzeżenie CA1831: Użyj narzędzia AsSpan zamiast indeksatorów opartych na zakresie dla ciągu

Reguła analizatora kodu platformy .NET CA1831 jest domyślnie włączona, począwszy od platformy .NET 5. Tworzy ostrzeżenie kompilacji dla dowolnego kodu, w którym Rangeindeksator oparty na indeksatorze jest używany w ciągu, ale żadna kopia nie była przeznaczona.

Opis zmiany

Począwszy od platformy .NET 5, zestaw .NET SDK zawiera analizatory kodu źródłowego platformy .NET. Kilka z tych reguł jest domyślnie włączonych, w tym CA1831. Jeśli projekt zawiera kod, który narusza tę regułę i jest skonfigurowany do traktowania ostrzeżeń jako błędów, ta zmiana może spowodować przerwanie kompilacji.

Reguła CA1831 znajduje wystąpienia, w których Rangeindeksator oparty na indeksatorze jest używany w ciągu, ale żadna kopia nie była przeznaczona. RangeJeśli indeksator oparty na metodzie jest używany bezpośrednio w ciągu do tworzenia niejawnego rzutowania, tworzona jest niepotrzebna kopia żądanej części ciągu. Na przykład:

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

CA1831 sugeruje użycie indeksatora opartego Rangena zakresie ciągu, zamiast tego. Na przykład:

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

Wprowadzona wersja

5,0

  • Aby poprawić kod i uniknąć niepotrzebnych alokacji, wywołaj metodę AsSpan(String) lub AsMemory(String) przed użyciem indeksatora opartego Rangena technologii . Na przykład:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Jeśli nie chcesz zmieniać kodu, możesz wyłączyć regułę, ustawiając jej ważność na suggestion lub none. Aby uzyskać więcej informacji, zobacz Konfigurowanie reguł analizy kodu.

  • Aby całkowicie wyłączyć analizę kodu, ustaw wartość EnableNETAnalyzers na false w pliku projektu. Aby uzyskać więcej informacji, zobacz EnableNETAnalyzers.

Dotyczy interfejsów API