Compartir vía


CA1877: Use sobrecargas "Path.Combine" o "Path.Join".

Propiedad Importancia
Identificador de la regla CA1877
Título Uso Path.Combine o Path.Join sobrecargas
Categoría Rendimiento
La corrección es disruptiva o no disruptiva Non-breaking
Habilitado de forma predeterminada en .NET 10 Como sugerencia

Causa

Se usan varias operaciones consecutivas Path.Combine o Path.Join para crear una ruta de acceso.

Descripción de la regla

Cuando se usan varias operaciones consecutivas Path.Combine o Path.Join , es más eficaz usar una sobrecarga que acepta varios segmentos de ruta de acceso. Este enfoque reduce el número de asignaciones y llamadas de función, lo que mejora el rendimiento. Ambos métodos proporcionan sobrecargas que aceptan varios parámetros, lo que permite contraer operaciones consecutivas en una sola llamada.

Cómo corregir infracciones

Reemplace las operaciones consecutivas Path.Combine o Path.Join por una sola llamada mediante una sobrecarga que acepte todos los segmentos de ruta de acceso.

Hay disponible una corrección de código que realiza automáticamente esta transformación.

Example

El fragmento de código siguiente muestra una infracción de 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

El siguiente fragmento de código corrige la infracción:

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

Cuándo suprimir las advertencias

Es seguro suprimir una advertencia de esta regla si el rendimiento no es un problema.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

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

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad a none en el archivo de configuración.

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

Para obtener más información, consulte Cómo suprimir advertencias de análisis de código.

Consulte también