Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
| Недвижимость | Ценность |
|---|---|
| Идентификатор правила | 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
Дополнительные сведения см. в разделе "Подавление предупреждений анализа кода".