CA1507: Use nameof in place of string (Usar nameof en lugar de una cadena)

Propiedad Value
Identificador de la regla CA1507
Título Usar nameof en lugar de una cadena
Categoría Capacidad de mantenimiento
La corrección es problemática o no problemática Poco problemático
Habilitado de forma predeterminada en .NET 8 Como sugerencia

Causa

Un literal o constante string que coincide con el nombre de un parámetro del método contenedor o con el nombre de una propiedad del tipo contenedor que se utiliza como un argumento para un método.

Descripción de la regla

La regla CA1507 marca el uso de un literal string como argumento para un método o constructor en el que una expresión nameof (NameOf en Visual Basic) facilitaría el mantenimiento. La regla se desencadena si se cumplen todas las condiciones siguientes:

  • El argumento es un literal o constante string.

  • El argumento corresponde a un parámetro escrito string del método o el constructor que se está invocando (es decir, no hay ninguna conversión implicada en el sitio de llamada).

  • Tener instaladas localmente una de las siguientes:

    • El nombre declarado del parámetro es paramName, y el valor constante del literal string coincide con el nombre de un parámetro del método, la expresión lambda o la función local en la que se invoca el método o el constructor.

    • El nombre declarado del parámetro es propertyName, y el valor constante del literal string coincide con el nombre de una propiedad del tipo en el que se invoca el método o el constructor.

La regla CA1507 mejora el mantenimiento del código en los casos en los que se cambie el nombre del parámetro en el futuro, pero por error no se cambie el nombre del literal string. Al usar nameof, se cambiará el nombre del símbolo cuando se cambie el nombre del parámetro mediante una operación de refactorización. Además, el compilador detecta los errores ortográficos en el nombre del parámetro.

Cómo corregir infracciones

Para corregir una infracción, reemplace el literal string por una expresión nameof (NameOf en Visual Basic). Por ejemplo, en los dos fragmentos de código siguientes se muestra una infracción de la regla y cómo corregirla:

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

Sugerencia

Hay disponible una corrección de código para esta regla en Visual Studio. Para usarla, coloque el cursor sobre el literal string y presione Ctrl+. (punto). Elija Use nameof para expresar nombres de símbolos de la lista de opciones que se presentan.

Code fix for CA1507 - use nameof to express symbol names

Cuándo suprimir las advertencias

Es seguro suprimir una infracción de esta regla si no le preocupa el mantenimiento del código.

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

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.CA1507.severity = none

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

Consulte también