Freigeben über


CA1875: Verwenden von "Regex.Count"

Eigentum Wert
Regel-ID CA1875
Title Verwende Regex.Count
Kategorie Leistung
Korrektur ist blockierend oder nicht-blockierend Non-breaking
Standardmäßig in .NET 10 aktiviert Als Vorschlag

Ursache

Die Count Eigenschaft des MatchCollection From-Objekts Regex.Matches wird verwendet, um die Anzahl der Übereinstimmungen abzurufen.

Regelbeschreibung

Regex.Count ist einfacher und schneller als Regex.Matches(...).Count. Die Count() Methode ist für das Zählen von Übereinstimmungen optimiert, ohne dass die vollständige MatchCollectionMaterialisierung erfolgt. Beim Aufrufen Matches() und anschließenden Zugriff .Count wird unnötige Arbeit ausgeführt, die sich auf die Leistung auswirken kann.

Wie man Verstöße behebt

Ersetzen Sie Anrufe durch Regex.Matches(...).CountRegex.Count(...).

Eine Codekorrektur , die diese Transformation automatisch ausführt, ist verfügbar.

Example

Der folgende Codeausschnitt zeigt einen Verstoß gegen 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

Der folgende Codeausschnitt behebt die Verletzung:

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

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, eine Warnung aus dieser Regel zu unterdrücken, wenn die Leistung kein Problem ist oder wenn Sie auf eine Version von .NET abzielen, die nicht enthalten Regex.Count ist (vor .NET 7).

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Deaktivieren Sie die Regel für eine Datei, einen Ordner oder ein Projekt, indem Sie den Schweregrad in der none auf setzen.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch