Partager via


CA1877 : Utiliser les surcharges « Path.Combine » ou « Path.Join »

Propriété Valeur
Identificateur de la règle CA1877
Titre Utilisation Path.Combine ou Path.Join surcharges
Catégorie Niveau de performance
Le correctif est cassant ou non cassant Non-breaking
Activé par défaut dans .NET 10 À titre de suggestion

La cause

Plusieurs opérations consécutives ou Path.Join consécutives Path.Combine sont utilisées pour générer un chemin d’accès.

Description de la règle

Lorsque vous utilisez plusieurs opérations consécutives ou Path.Join opérationnellesPath.Combine, il est plus efficace d’utiliser une surcharge qui accepte plusieurs segments de chemin d’accès. Cette approche réduit le nombre d’allocations et d’appels de fonction, ce qui améliore les performances. Les deux méthodes fournissent des surcharges qui acceptent plusieurs paramètres, ce qui vous permet de réduire les opérations consécutives en un seul appel.

Comment corriger les violations

Remplacez les opérations consécutives ou Path.Join par Path.Combine un seul appel à l’aide d’une surcharge qui accepte tous les segments de chemin d’accès.

Un correctif de code qui effectue automatiquement cette transformation est disponible.

Example

L’extrait de code suivant montre une violation de 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

L’extrait de code suivant corrige la violation :

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

Quand supprimer les avertissements

Il est sûr de supprimer un avertissement de cette règle si les performances ne sont pas un problème.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements d’analyse du code.

Voir aussi