Delen via


CA1877: Gebruik 'Path.Combine' of 'Path.Join' overloads

Vastgoed Waarde
Regel-ID CA1877
Titel Gebruik Path.Combine of Path.Join overbelastingen
Categorie prestatie
De oplossing veroorzaakt brekende of niet-brekende problemen Non-breaking
Standaard ingeschakeld in .NET 10 Als suggestie

Oorzaak

Meerdere opeenvolgende bewerkingen Path.Combine of Path.Join bewerkingen worden gebruikt om een pad te maken.

Beschrijving van regel

Wanneer u meerdere opeenvolgende Path.Combine bewerkingen gebruikt Path.Join , is het efficiënter om een overbelasting te gebruiken die meerdere padsegmenten accepteert. Deze aanpak vermindert het aantal toewijzingen en functie-aanroepen, waardoor de prestaties worden verbeterd. Beide methoden bieden overbelastingen die meerdere parameters accepteren, zodat u opeenvolgende bewerkingen in één aanroep kunt samenvouwen.

Hoe schendingen op te lossen

Vervang opeenvolgende Path.Combine bewerkingen door Path.Join één aanroep met behulp van een overbelasting die alle padsegmenten accepteert.

Er is een codeoplossing beschikbaar waarmee deze transformatie automatisch wordt uitgevoerd.

Example

In het volgende codefragment ziet u een schending van 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

Met het volgende codefragment wordt de schending opgelost:

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

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken als de prestaties geen probleem zijn.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

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

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst ervan in op none in het configuratiebestand.

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

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.

Zie ook