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.

Consulte también