Compartilhar via


É 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

Consulte também

Referência

Object.Equals