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 9 | 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 de um arquivo, pasta ou projeto, defina sua gravidade 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.
Regras conexas
- CS1717: Atribuição feita à mesma variável; Pretendia atribuir outra coisa?
- CA2011: Não atribuir propriedade dentro de seu setter
- CA2246: Não atribua um símbolo e seu membro na mesma instrução