Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| 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.