É igual a sobrecarga de operador em substituindo ValueType.Equals
TypeName |
OverloadOperatorEqualsOnOverridingValueTypeEquals |
CheckId |
CA2231 |
Category (Categoria) |
Microsoft.uso |
Quebrando alterar |
Não separável |
Causa
Um tipo de valor substitui Object.Equals mas não implementa o operador de igualdade.
Descrição da regra
A maioria das linguagens de programação não há nenhuma implementação padrão do operador de igualdade (==) para tipos de valor.Se sua linguagem de programação suporta sobrecargas de operador, você deve considerar a implementação o operador de igualdade.Seu comportamento deve ser idêntico do Equals.
Não é possível usar o operador de igualdade padrão em uma implementação do operador de igualdade sobrecarregada.Isso fará com que um estouro de pilha.Para implementar o operador de igualdade, use o método objeto.Equals na sua implementação.Por exemplo:
If (Object.ReferenceEquals(left, Nothing)) Then
Return Object.ReferenceEquals(right, Nothing)
Else
Return left.Equals(right)
End If
if (Object.ReferenceEquals(left, null))
return Object.ReferenceEquals(right, null);
return left.Equals(right);
Como corrigir violações
Para corrigir uma violação dessa regra, implemente o operador de igualdade.
Quando suprimir avisos
É seguro eliminar um aviso da regra; no entanto, recomendamos que você forneça o operador de igualdade se possível.
Exemplo
O exemplo a seguir define um tipo que violam essa regra.
using System;
namespace UsageLibrary
{
public struct PointWithoutHash
{
private int x,y;
public PointWithoutHash(int x, int y)
{
this.x = x;
this.y = y;
}
public override string ToString()
{
return String.Format("({0},{1})",x,y);
}
public int X {get {return x;}}
public int Y {get {return x;}}
// Violates rule: OverrideGetHashCodeOnOverridingEquals.
// Violates rule: OverrideOperatorEqualsOnOverridingValueTypeEquals.
public override bool Equals (object obj)
{
if (obj.GetType() != typeof(PointWithoutHash))
return false;
PointWithoutHash p = (PointWithoutHash)obj;
return ((this.x == p.x) && (this.y == p.y));
}
}
}
Regras relacionadas
Não sobrecarregar o operador equals em tipos de referência
Operador sobrecargas nomeou alternativas
Operadores devem ter sobrecargas simétricas
É igual a substituir na sobrecarga de operador é igual a
Substituir GetHashCode na substituição Equals