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 literalstring
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 literalstring
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.
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.