Sdílet prostřednictvím


CA1877: Použijte přetížení Path.Combine nebo Path.Join

Vlastnictví Hodnota
Identifikátor pravidla CA1877
Titul Použití Path.Combine nebo Path.Join přetížení
Kategorie výkon
Oprava je destruktivní nebo nedestruktivní Non-breaking
Povoleno ve výchozím nastavení v .NET 10 Jako návrh

Příčina

K sestavení cesty se používá několik po sobě jdoucích Path.Combine operací nebo Path.Join operací.

Popis pravidla

Pokud používáte více po sobě jdoucích Path.Combine operací nebo Path.Join operací, je efektivnější použít přetížení, které přijímá více segmentů cesty. Tento přístup snižuje počet přidělení a volání funkcí, což zlepšuje výkon. Obě metody poskytují přetížení, která přijímají více parametrů a umožňují sbalit po sobě jdoucí operace do jednoho volání.

Jak opravit porušení

Nahraďte po sobě jdoucí Path.Combine nebo Path.Join operace jedním voláním pomocí přetížení, které přijímá všechny segmenty cesty.

Je k dispozici oprava kódu , která tuto transformaci automaticky provede.

Example

Následující fragment kódu ukazuje porušení 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

Následující fragment kódu opraví porušení zásad:

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

Kdy potlačit upozornění

Pokud výkon není problém, je bezpečné potlačit upozornění z tohoto pravidla.

Potlačte upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Chcete-li pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost na none v konfiguračním souboru .

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Viz také