| 资产 | 价值 |
|---|---|
| 规则 ID | CA1877 |
| 标题 | 使用 Path.Combine 或 Path.Join 重载 |
| 类别 | 性能 |
| 修复是中断修复还是非中断修复 | Non-breaking |
| 在 .NET 10 中默认启用 | 作为建议 |
原因
多个连续 Path.Combine 作或 Path.Join 作用于生成路径。
规则说明
使用多个连续 Path.Combine 或 Path.Join 作时,使用接受多个路径段的重载会更有效。 此方法可减少分配和函数调用的数量,从而提高性能。 这两种方法都提供接受多个参数的重载,使你可以将连续作折叠到单个调用中。
如何修复违规行为
使用接受所有路径段的重载将连续 Path.Combine 或 Path.Join 作替换为单个调用。
自动执行此转换 的代码修复 可用。
Example
以下代码片段显示了 CA1877 的冲突:
public string GetFilePath(string folder, string subfolder, string filename)
{
// Violation.
string temp = Path.Combine(folder, subfolder);
return Path.Combine(temp, filename);
}
public string GetLogPath(string baseDir, string date, string category)
{
// Violation.
return Path.Join(Path.Join(baseDir, date), category);
}
Public Function GetFilePath(folder As String, subfolder As String, filename As String) As String
' Violation.
Dim temp As String = Path.Combine(folder, subfolder)
Return Path.Combine(temp, filename)
End Function
Public Function GetLogPath(baseDir As String, [date] As String, category As String) As String
' Violation.
Return Path.Join(Path.Join(baseDir, [date]), category)
End Function
以下代码片段修复了冲突:
public string GetFilePath(string folder, string subfolder, string filename)
{
// No violation.
return Path.Combine(folder, subfolder, filename);
}
public string GetLogPath(string baseDir, string date, string category)
{
// No violation.
return Path.Join(baseDir, date, category);
}
Public Function GetFilePath(folder As String, subfolder As String, filename As String) As String
' No violation.
Return Path.Combine(folder, subfolder, filename)
End Function
Public Function GetLogPath(baseDir As String, [date] As String, category As String) As String
' No violation.
Return Path.Join(baseDir, [date], category)
End Function
何时禁止显示警告
如果性能不关心,则禁止显示此规则的警告是安全的。
禁止显示警告
如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。
#pragma warning disable CA1877
// The code that's violating the rule is on this line.
#pragma warning restore CA1877
若要禁用文件、文件夹或项目的规则,请在none中将其严重性设置为。
[*.{cs,vb}]
dotnet_diagnostic.CA1877.severity = none
有关详细信息,请参阅 如何禁止显示代码分析警告。