Condividi tramite


CA1877: usare gli overload 'Path.Combine' o 'Path.Join'

Proprietà Value
ID della regola CA1877
Titolo Usare Path.Combine o Path.Join overload
Categoria Prestazioni
La correzione causa un'interruzione o meno Non-breaking
Abilitato per impostazione predefinita in .NET 10 Come suggerimento

Motivo

Per compilare un percorso vengono usate più operazioni o Path.Join consecutivePath.Combine.

Descrizione regola

Quando si usano più operazioni o Path.Join consecutivePath.Combine, è più efficiente usare un overload che accetta più segmenti di percorso. Questo approccio riduce il numero di allocazioni e chiamate di funzione, migliorando le prestazioni. Entrambi i metodi forniscono overload che accettano più parametri, consentendo di comprimere le operazioni consecutive in una singola chiamata.

Come correggere le violazioni

Sostituire operazioni consecutive Path.Combine o Path.Join con una singola chiamata usando un overload che accetta tutti i segmenti di percorso.

È disponibile una correzione del codice che esegue automaticamente questa trasformazione.

Example

Il frammento di codice seguente mostra una violazione di 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

Il frammento di codice seguente corregge la violazione:

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 eliminare gli avvisi

Se le prestazioni non sono un problema, è possibile eliminare un avviso da questa regola.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

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

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità su none nel file di configurazione .

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

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedere anche