Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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.