Dela via


CA1875: Använd "Regex.Count"

Fastighet Värde
Regel-ID CA1875
Titel Använd Regex.Count
Kategori Föreställning
Korrigeringen är antingen brytande eller icke-brytande Non-breaking
Aktiverad som standard i .NET 10 Som förslag

Orsak

Egenskapen CountMatchCollection från Regex.Matches används för att hämta antalet matchningar.

Regelbeskrivning

Regex.Count är enklare och snabbare än Regex.Matches(...).Count. Metoden Count() är optimerad för att räkna matchningar utan att materialisera hela MatchCollection. Att anropa Matches() och sedan komma åt .Count gör onödigt arbete som kan påverka prestanda.

Så här åtgärdar du överträdelser

Ersätt anrop till Regex.Matches(...).Count med Regex.Count(...).

Det finns en kodkorrigering som utför den här omvandlingen automatiskt.

Example

Följande kodfragment visar ett brott mot CA1875:

using System.Text.RegularExpressions;

class Example
{
    public int CountWords(string text)
    {
        // Violation
        return Regex.Matches(text, @"\b\w+\b").Count;
    }
}
Imports System.Text.RegularExpressions

Class Example
    Public Function CountWords(text As String) As Integer
        ' Violation
        Return Regex.Matches(text, "\b\w+\b").Count
    End Function
End Class

Följande kodfragment åtgärdar överträdelsen:

using System.Text.RegularExpressions;

class Example
{
    public int CountWords(string text)
    {
        // Fixed
        return Regex.Count(text, @"\b\w+\b");
    }
}
Imports System.Text.RegularExpressions

Class Example
    Public Function CountWords(text As String) As Integer
        ' Fixed
        Return Regex.Count(text, "\b\w+\b")
    End Function
End Class

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om prestanda inte är ett problem eller om du riktar in dig på en version av .NET som inte ingår Regex.Count (före .NET 7).

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA1875
// The code that's violating the rule is on this line.
#pragma warning restore CA1875

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA1875.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även