CA1801: Revisar parámetros sin utilizar

Propiedad Value
Identificador de la regla CA1801
Título Revisar parámetros sin utilizar
Categoría Uso
La corrección es problemática o no problemática No problemática: si el miembro no es visible fuera del ensamblado, independientemente del cambio que realice.

No problemática: si cambia el miembro para usar el parámetro dentro de su cuerpo.

Problemática: si quita el parámetro y es visible fuera del ensamblado.
Habilitado de forma predeterminada en .NET 8 No

Causa

Una firma de método incluye un parámetro que no se utiliza en el cuerpo del método.

Esta regla no examina los siguientes tipos de métodos:

  • Métodos a los que hace referencia un delegado.

  • Métodos usados como controladores de eventos.

  • Constructores de serialización (vea las instrucciones).

  • Métodos de serialización GetObjectData.

  • Métodos declarados con el modificador abstract (MustOverride en Visual Basic).

  • Métodos declarados con el modificador virtual (Overridable en Visual Basic).

  • Métodos declarados con el modificador override (Overrides en Visual Basic).

  • Métodos declarados con el modificador extern (instrucción Declare en Visual Basic).

Esta regla no marca los parámetros que se denominan con el símbolo de descarte (por ejemplo, _, _1 y _2). Esto reduce el ruido de advertencia en los parámetros necesarios para los requisitos de firma; por ejemplo, un método que se usa como delegado, un parámetro con atributos especiales o un parámetro a cuyo valor un marco accede implícitamente en tiempo de ejecución, pero al que no se hace referencia en el código.

Nota

La regla ha quedado en desuso y se ha reemplazado por IDE0060. Para obtener información sobre cómo aplicar el analizador de IDE0060 en la compilación, vea Análisis de estilo de código.

Descripción de la regla

Revise los parámetros de los métodos no virtuales que no se usan en el cuerpo del método para asegurarse de que no existe ninguna incorrección entorno al error de acceso. Los parámetros sin usar incurren en costos de mantenimiento y rendimiento.

A veces, una infracción de esta regla puede apuntar a un error de implementación en el método. Por ejemplo, el parámetro se debería haber utilizado en el cuerpo del método. Suprima las advertencias de esta regla si el parámetro debe existir debido a la compatibilidad con versiones anteriores.

Cómo corregir infracciones

Para corregir una infracción de esta regla, quite el parámetro sin usar (una corrección problemática) o use el parámetro en el cuerpo del método (una corrección no problemática).

Cuándo suprimir las advertencias

Se puede suprimir una advertencia de esta regla:

  • En código enviado previamente para el que la corrección sea problemática.

  • En el parámetro this de un método de extensión personalizado para Microsoft.VisualStudio.TestTools.UnitTesting.Assert. Las funciones de la clase Assert son estáticas, por lo que no es necesario acceder al parámetro this en el cuerpo del método.

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 CA1801
// The code that's violating the rule is on this line.
#pragma warning restore CA1801

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

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

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

Configuración del código para analizar

Use la opción siguiente para configurar en qué partes del código base ejecutar esta regla.

Puede configurar esta opción solo para esta regla, para todas las reglas a las que se aplica o para todas las reglas de esta categoría (Rendimiento) a las que se aplica. Para más información, vea Opciones de configuración de reglas de calidad de código.

Incluir superficies de API específicas

Puede configurar en qué partes del código base ejecutar esta regla, en función de su accesibilidad. Por ejemplo, para especificar que la regla solo se debe ejecutar en la superficie de API no públicas, agregue el siguiente par clave-valor a un archivo .editorconfig en el proyecto:

dotnet_code_quality.CAXXXX.api_surface = private, internal

De forma predeterminada, la regla CA1801 se aplica a todas las superficies de API (públicas, internas y privadas).

Ejemplo

En el ejemplo siguiente se muestran dos métodos. Un método infringe la regla, y el otro la cumple.

// This method violates the rule.
public static string GetSomething(int first, int second)
{
    return first.ToString(CultureInfo.InvariantCulture);
}

// This method satisfies the rule.
public static string GetSomethingElse(int first)
{
    return first.ToString(CultureInfo.InvariantCulture);
}