Gerar substituições de método Equals e GetHashCode no Visual Studio

Essa geração de código se aplica a:

  • C#

Que: Permite gerar métodos Equals e GetHashCode .

Quando: Gere essas substituições quando você tiver um tipo que deve ser comparado por um ou mais campos, em vez de pelo local do objeto na memória.

Por que:

  • Se você estiver implementando um tipo de valor, considere substituir o método Equals . Você pode obter um desempenho maior em relação à implementação padrão do método Equals em ValueType quando fizer isso.

  • Se você estiver implementando um tipo de referência, considere substituir o método Equals se seu tipo se parecer com um tipo base, como Point, String, BigNumber e assim por diante.

  • Substitua o método GetHashCode para permitir que um tipo funcione corretamente em uma tabela de hash. Leia mais diretrizes sobre operadores de igualdade.

Como fazer

  1. Coloque o cursor em algum lugar na linha da declaração de tipo.

    public class ImaginaryNumber
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    }
    

    Seu código deve ser semelhante à seguinte captura de tela:

    Captura de tela do código realçado no qual aplicar o método gerado

    Dica

    Não clique duas vezes em selecionar o nome do tipo ou a opção de menu não estará disponível. Basta colocar o cursor em algum lugar na linha.

  2. Em seguida, escolha uma das seguintes ações:

    • Pressione Ctrl+. para acionar o menu Ações rápidas e refatoração .

    • Clique com o botão direito do mouse e selecione o menu Ações rápidas e refatoração .

    • Clique na captura de tela do ícone da chave de fenda ações rápidas no ícone do Visual Studio que aparece na margem esquerda.

  3. No menu suspenso, selecione Gerar Igual (objeto) ou Gerar Igual e GetHashCode.

    Captura de tela do menu suspenso Gerar Substituições

  4. Na caixa de diálogo Escolher membros , selecione os membros para os quais você deseja gerar os métodos para:

    Caixa de diálogo Gerar substituições

    Dica

    Você também pode optar por gerar operadores dessa caixa de diálogo usando a caixa de seleção próxima à parte inferior da caixa de diálogo.

    Os Equals métodos e os métodos GetHashCode são gerados com implementações padrão, conforme mostrado no código a seguir:

    public class ImaginaryNumber : IEquatable<ImaginaryNumber>
    {
        public double RealNumber { get; set; }
        public double ImaginaryUnit { get; set; }
    
        public override bool Equals(object obj)
        {
            return Equals(obj as ImaginaryNumber);
        }
    
        public bool Equals(ImaginaryNumber other)
        {
            return other != null &&
                   RealNumber == other.RealNumber &&
                   ImaginaryUnit == other.ImaginaryUnit;
        }
    
        public override int GetHashCode()
        {
            return HashCode.Combine(RealNumber, ImaginaryUnit);
        }
    }
    

    Seu código deve ser semelhante à seguinte captura de tela:

    Captura de tela do resultado do método gerado

Consulte também