Udostępnij za pomocą


CA1877: Użyj przeciążeń "Path.Combine" lub "Path.Join"

Majątek Wartość
Identyfikator reguły CA1877
Tytuł Używanie Path.Combine lub Path.Join przeciążenia
Kategoria Wydajność
Poprawka jest przełomowa lub nieprzełomowa Non-breaking
Domyślnie włączone na platformie .NET 10 Jako sugestia

Przyczyna

Do utworzenia ścieżki służy wiele kolejnych Path.Combine operacji lub Path.Join operacji.

Opis reguły

Jeśli używasz wielu kolejnych Path.Combine operacji lub Path.Join operacji, bardziej wydajne jest użycie przeciążenia, które akceptuje wiele segmentów ścieżek. Takie podejście zmniejsza liczbę alokacji i wywołań funkcji, zwiększając wydajność. Obie metody zapewniają przeciążenia, które akceptują wiele parametrów, co umożliwia zwinięcie kolejnych operacji do jednego wywołania.

Jak naprawić naruszenia

Zastąp kolejne Path.Combine operacje Path.Join pojedynczym wywołaniem za pomocą przeciążenia, które akceptuje wszystkie segmenty ścieżki.

Dostępna jest poprawka kodu , która automatycznie wykonuje tę transformację.

Example

Poniższy fragment kodu przedstawia naruszenie 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

Poniższy fragment kodu naprawia naruszenie:

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

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie z tej reguły, jeśli wydajność nie jest problemem.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Zobacz także