| 资产 | 价值 |
|---|---|
| 规则 ID | 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
有关详细信息,请参阅 如何禁止显示代码分析警告。