CA1877: Använd överlagringar av Path.Combine eller Path.Join

Fastighet Värde
Regel-ID CA1877
Titel Användning Path.Combine eller Path.Join överlagring
Kategori Föreställning
Korrigeringen är antingen brytande eller icke-brytande Non-breaking
Aktiverad som standard i .NET 10 Som förslag

Orsak

Flera på varandra följande Path.Combine åtgärder eller Path.Join åtgärder används för att skapa en sökväg.

Regelbeskrivning

När du använder flera på varandra följande Path.Combine åtgärder eller Path.Join åtgärder är det mer effektivt att använda en överlagring som accepterar flera sökvägssegment. Den här metoden minskar antalet allokeringar och funktionsanrop, vilket förbättrar prestandan. Båda metoderna ger överlagringar som accepterar flera parametrar, så att du kan minimera efterföljande åtgärder i ett enda anrop.

Så här åtgärdar du överträdelser

Ersätt efterföljande Path.Combine åtgärder eller Path.Join åtgärder med ett enda anrop med en överlagring som accepterar alla sökvägssegment.

Det finns en kodkorrigering som utför den här omvandlingen automatiskt.

Example

Följande kodfragment visar ett brott mot 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

Följande kodfragment åtgärdar överträdelsen:

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

När du ska ignorera varningar

Det är säkert att ignorera en varning från den här regeln om prestanda inte är ett problem.

Undertryck en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

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

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

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

Mer information finns i Så här utelämnar du kodanalysvarningar.

Se även