Freigeben über


CA1877: Verwenden von "Path.Combine" oder "Path.Join"-Überladungen

Eigentum Wert
Regel-ID CA1877
Title Verwenden Path.Combine oder Path.Join Überladungen
Kategorie Leistung
Korrektur ist blockierend oder nicht-blockierend Non-breaking
Standardmäßig in .NET 10 aktiviert Als Vorschlag

Ursache

Mehrere aufeinander folgende Path.Combine Oder Path.Join Vorgänge werden verwendet, um einen Pfad zu erstellen.

Regelbeschreibung

Wenn Sie mehrere aufeinander folgende Path.Combine Oder Path.Join Vorgänge verwenden, ist es effizienter, eine Überladung zu verwenden, die mehrere Pfadsegmente akzeptiert. Dieser Ansatz reduziert die Anzahl der Zuordnungen und Funktionsaufrufe, wodurch die Leistung verbessert wird. Beide Methoden bieten Überladungen, die mehrere Parameter akzeptieren, sodass Sie aufeinander folgende Vorgänge in einen einzelnen Aufruf reduzieren können.

Wie man Verstöße behebt

Ersetzen Sie aufeinander folgende Path.Combine Oder Path.Join Vorgänge durch einen einzelnen Aufruf mithilfe einer Überladung, die alle Pfadsegmente akzeptiert.

Eine Codekorrektur , die diese Transformation automatisch ausführt, ist verfügbar.

Example

Der folgende Codeausschnitt zeigt einen Verstoß gegen 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

Der folgende Codeausschnitt behebt die Verletzung:

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

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, eine Warnung aus dieser Regel zu unterdrücken, wenn die Leistung kein Problem darstellt.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Deaktivieren Sie die Regel für eine Datei, einen Ordner oder ein Projekt, indem Sie den Schweregrad in der none auf setzen.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch