Partilhar via


CA2245: Não atribua uma propriedade a si mesmo

Property valor
ID da regra CA2245
Título Não atribua uma propriedade a si mesmo
Categoria Utilização
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como sugestão

Motivo

Um imóvel foi acidentalmente cedido a si mesmo.

Descrição da regra

O compilador C# gera um aviso CS1717: Atribuição feita à mesma variável, você quis atribuir outra coisa? quando um campo, símbolo local ou parâmetro é atribuído a si mesmo. Esse erro é comum quando um símbolo local, parâmetro ou campo tem um nome semelhante a outro símbolo no escopo. Em vez de usar símbolos diferentes no lado esquerdo e direito da tarefa, o mesmo símbolo foi usado em ambos os lados. Isso leva a uma atribuição redundante do valor para si mesmo e geralmente indica um bug funcional.

Atribuir uma propriedade a si mesmo também é um bug funcional semelhante para quase todos os casos do mundo real. No entanto, em alguns casos extremos, buscar um valor de propriedade pode ter efeitos colaterais e o novo valor da propriedade é diferente do valor original. Em caso afirmativo, a autoatribuição de propriedade não é redundante e não pode ser removida. Isso impede que o compilador gere um CS1717 aviso para autoatribuição de propriedade, sem introduzir uma alteração de quebra para esses casos.

A regra CA2245 visa preencher esta lacuna. Ele relata a violação para autoatribuição de propriedade para ajudar a corrigir esses bugs funcionais. Para o pequeno conjunto de casos de esquina em que a autoatribuição de propriedade é desejável, CA2245 as violações podem ser suprimidas na fonte com um comentário de justificação apropriado.

Como corrigir violações

Para corrigir violações, use símbolos diferentes no lado esquerdo e no lado direito da atribuição. Por exemplo, o trecho de código a seguir mostra uma violação da regra e como corrigi-la:

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;
    }
}

Quando suprimir avisos

É seguro suprimir violações dessa regra se buscar um valor de propriedade pode ter efeitos colaterais e o novo valor da propriedade é diferente do valor original. Em caso afirmativo, a autoatribuição de propriedade não é redundante. Um comentário de justificação deve ser adicionado à supressão para documentar isso como comportamento esperado.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar a regra.

#pragma warning disable CA2245
// The code that's violating the rule is on this line.
#pragma warning restore CA2245

Para desabilitar a regra para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também