Поделиться через


CA1877: используйте перегрузки Path.Combine или Path.Join.

Недвижимость Ценность
Идентификатор правила CA1877
Заголовок Использование Path.Combine или Path.Join перегрузки
Категория Производительность
Исправление является разрушающим или неразрушающим Non-breaking
Включен по умолчанию в .NET 10 Как предложение

Причина

Для создания пути используются несколько последовательных операций или Path.Join последовательных Path.Combine операций.

Описание правила

При использовании нескольких последовательных Path.Combine или Path.Join операций более эффективно использовать перегрузку, которая принимает несколько сегментов пути. Этот подход сокращает количество выделений и вызовов функций, повышая производительность. Оба метода предоставляют перегрузки, принимаюющие несколько параметров, что позволяет свернуть последовательные операции в один вызов.

Устранение нарушений

Замените последовательные Path.Combine или Path.Join операции одним вызовом с помощью перегрузки, которая принимает все сегменты пути.

Доступно исправление кода , которое автоматически выполняет это преобразование.

Example

В следующем фрагменте кода показано нарушение 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

Следующий фрагмент кода исправляет нарушение.

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

Когда следует подавлять предупреждения

Это безопасно, чтобы отключить предупреждение от этого правила, если производительность не является проблемой.

Отключение предупреждений

Если вы просто хотите отключить одно нарушение, добавьте директивы препроцессора в исходный файл, чтобы отключить и повторно включить правило.

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

Чтобы отключить правило для файла, папки или проекта, задайте его серьезность none в файле конфигурации.

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

Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".

См. также