Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
| 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.