Поделиться через


CA1874: используйте Regex.IsMatch.

Недвижимость Ценность
Идентификатор правила CA1874
Заголовок Используйте Regex.IsMatch
Категория Производительность
Исправление является разрушающим или неразрушающим Non-breaking
Включен по умолчанию в .NET 10 Как предложение

Причина

Свойство Success результата Regex.Match используется для проверки соответствия шаблона.

Описание правила

Regex.IsMatch проще и быстрее Regex.Match(...).Success. Метод IsMatch оптимизирован для случая, когда необходимо только знать, существует ли совпадение, а не то, что такое совпадение. Вызов Match() , а затем проверка Success делает ненужные действия, которые могут повлиять на производительность.

Устранение нарушений

Замените вызовы Regex.Match(...).SuccessRegex.IsMatch(...)на .

Доступно исправление кода , которое автоматически выполняет это преобразование.

Example

В следующем фрагменте кода показано нарушение CA1874:

using System.Text.RegularExpressions;

class Example
{
    public bool IsValidEmail(string email)
    {
        // Violation
        return Regex.Match(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$").Success;
    }
}
Imports System.Text.RegularExpressions

Class Example
    Public Function IsValidEmail(email As String) As Boolean
        ' Violation
        Return Regex.Match(email, "^[^@\s]+@[^@\s]+\.[^@\s]+$").Success
    End Function
End Class

Следующий фрагмент кода исправляет нарушение.

using System.Text.RegularExpressions;

class Example
{
    public bool IsValidEmail(string email)
    {
        // Fixed
        return Regex.IsMatch(email, @"^[^@\s]+@[^@\s]+\.[^@\s]+$");
    }
}
Imports System.Text.RegularExpressions

Class Example
    Public Function IsValidEmail(email As String) As Boolean
        ' Fixed
        Return Regex.IsMatch(email, "^[^@\s]+@[^@\s]+\.[^@\s]+$")
    End Function
End Class

Когда следует подавлять предупреждения

Это безопасно, чтобы отключить предупреждение от этого правила, если производительность не является проблемой.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".

См. также