CA2245: No asignar una propiedad a sí misma
Propiedad | Value |
---|---|
Identificador de la regla | CA2245 |
Título | No asignar una propiedad a sí misma |
Categoría | Uso |
La corrección es problemática o no problemática | Poco problemático |
Habilitado de forma predeterminada en .NET 8 | Como sugerencia |
Causa
Una propiedad se ha asignado accidentalmente a sí misma.
Descripción de la regla
El compilador de C# genera una advertencia CS1717: Assignment made to same variable; did you mean to assign something else? (Asignación a la misma variable; ¿quería asignar algo distinto?) cuando un símbolo local, de parámetro o de campo se asigna a sí mismo. Este error es habitual cuando un símbolo local, de parámetro o de campo tiene un nombre similar a otro símbolo en el ámbito. En lugar de usar símbolos distintos en el lado izquierdo y derecho de la asignación, se usó el mismo símbolo en ambos lados. Esto conduce a una asignación redundante del valor a sí mismo y suele indicar un error funcional.
Asignar una propiedad a sí misma también es un error funcional similar en casi todos los casos reales. Sin embargo, en algunos casos extremos, la captura de un valor de propiedad puede tener efectos secundarios, y el nuevo valor de propiedad es diferente del valor original. Si es así, la asignación automática de propiedades no es redundante y no se puede quitar. Esto evita que el compilador genere una advertencia CS1717
para la asignación automática de propiedades, sin introducir un cambio problemático para estos casos.
La regla CA2245
tiene como objetivo llenar este vacío. Informa sobre la infracción de la asignación automática de propiedades para ayudar a corregir estos errores funcionales. En el caso del pequeño grupo de casos en los que es preferible la asignación automática de propiedades, las infracciones de tipo CA2245
se pueden suprimir en el origen con un comentario de justificación adecuado.
Cómo corregir infracciones
Para corregir las infracciones, use símbolos distintos en la parte izquierda y derecha de la asignación. Por ejemplo, en el fragmento de código siguiente se muestra una infracción de la regla y cómo corregirla:
public class C
{
private int p = 0;
public int P { get; private set; }
public void M(int p)
{
// CS1717: Accidentally assigned the parameter 'p' to itself.
p = p;
// CA2245: Accidentally assigned the property 'P' to itself.
P = P;
}
}
public class C
{
private int p = 0;
public int P { get; private set; }
public void M(int p)
{
// No violation, now the parameter is assigned to the field.
this.p = p;
// No violation, now the parameter is assigned to the property.
P = p;
}
}
Cuándo suprimir las advertencias
Es seguro suprimir las infracciones de esta regla, aunque la captura de un valor de propiedad pueda tener efectos secundarios y el nuevo valor de la propiedad sea diferente del valor original. Si es así, la asignación automática de propiedades no es redundante. Se debe agregar un comentario de justificación a la supresión para documentar este comportamiento como esperado.
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 CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245
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.CA2245.severity = none
Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.
Reglas relacionadas
- CS1717: Assignment made to same variable; did you mean to assign something else? (Asignación a la misma variable; ¿quería asignar algo distinto?)
- CA2011: No asignar la propiedad dentro de su establecedor
- CA2246: No asignar un símbolo y su miembro en la misma instrucción