Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.