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
Zalecana akcja
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
lubnone
. Aby uzyskać więcej informacji, zobacz Konfigurowanie reguł analizy kodu.Aby całkowicie wyłączyć analizę kodu, ustaw wartość
EnableNETAnalyzers
nafalse
w pliku projektu. Aby uzyskać więcej informacji, zobacz EnableNETAnalyzers.