Compartilhar via


CA1877: Use sobrecargas 'Path.Combine' ou 'Path.Join'

Propriedade Value
ID da regra CA1877
Title Usar Path.Combine ou Path.Join sobrecarregar
Categoria Desempenho
Correção é disruptiva ou não disruptiva Non-breaking
Habilitado por padrão no .NET 10 Como sugestão

Motivo

Várias operações consecutivas Path.Combine ou Path.Join são usadas para criar um caminho.

Descrição da regra

Quando você usa várias operações consecutivas Path.Combine ou Path.Join , é mais eficiente usar uma sobrecarga que aceita vários segmentos de caminho. Essa abordagem reduz o número de alocações e chamadas de função, melhorando o desempenho. Ambos os métodos fornecem sobrecargas que aceitam vários parâmetros, permitindo que você recolher operações consecutivas em uma única chamada.

Como corrigir violações

Substitua consecutivas Path.Combine ou Path.Join operações por uma única chamada usando uma sobrecarga que aceita todos os segmentos de caminho.

Uma correção de código que executa automaticamente essa transformação está disponível.

Example

O snippet de código a seguir mostra uma violação da 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

O snippet de código a seguir corrige a violação:

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

Quando suprimir avisos

É seguro suprimir um aviso dessa regra se o desempenho não for uma preocupação.

Suprimir um aviso

Se você quiser suprimir apenas uma única violação, adicione diretivas de pré-processamento ao arquivo de origem para desabilitar e, em seguida, habilitar novamente a regra.

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

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também