CA1874:使用“Regex.IsMatch”

资产 价值
规则 ID CA1874
标题 使用 Regex.IsMatch
类别 性能
修复是中断修复还是非中断修复 Non-breaking
在 .NET 10 中默认启用 作为建议

原因

Success结果Regex.Match的属性用于检查模式是否匹配。

规则说明

Regex.IsMatchRegex.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

有关详细信息,请参阅 如何禁止显示代码分析警告

另请参阅