ValueType.GetHashCode Método

Definição

Retorna o código hash para a instância.

public:
 override int GetHashCode();
public override int GetHashCode ();
override this.GetHashCode : unit -> int
Public Overrides Function GetHashCode () As Integer

Retornos

Um inteiro com sinal de 32 bits que é o código hash para esta instância.

Exemplos

O exemplo a seguir demonstra como o GetHashCode método pode ser substituído por um tipo de valor derivado.

public ref struct Complex
{
public:
   double m_Re;
   double m_Im;
   virtual bool Equals( Object^ ob ) override
   {
      if ( dynamic_cast<Complex^>(ob) )
      {
         Complex^ c = dynamic_cast<Complex^>(ob);
         return m_Re == c->m_Re && m_Im == c->m_Im;
      }
      else
      {
         return false;
      }
   }

   virtual int GetHashCode() override
   {
      return m_Re.GetHashCode() ^ m_Im.GetHashCode();
   }
};
public struct Complex
{
    public double m_Re;
    public double m_Im;

    public override bool Equals( object ob ){
        if( ob is Complex ) {
            Complex c = (Complex) ob;
            return m_Re==c.m_Re && m_Im==c.m_Im;
        }
        else {
            return false;
        }
    }

    public override int GetHashCode(){
        return m_Re.GetHashCode() ^ m_Im.GetHashCode();
    }
}
type Complex() =
    member val m_Re = 0. with get, set
    member val m_Im = 0. with get, set

    override this.Equals(ob) =
        match ob with
        | :? Complex as c ->
            this.m_Re = c.m_Re && this.m_Im = c.m_Im
        | _ -> false
        
    override this.GetHashCode() =
        this.m_Re.GetHashCode() ^^^ this.m_Im.GetHashCode()
Public Structure Complex
   Private m_Re As Double
   Private m_Im As Double
       
   Public Overloads Function Equals(ob As Object) As Boolean
      If TypeOf ob Is Complex Then
         Dim c As Complex = CType(ob, Complex)
         Return m_Re = c.m_Re And m_Im = c.m_Im
      Else
         Return False
      End If
   End Function
   
   
   Public Overloads Function GetHashCode() As Integer
      Return m_Re.GetHashCode() ^ m_Im.GetHashCode()
   End Function

End Structure

Comentários

O GetHashCode método se aplica a tipos derivados de ValueType. Um ou mais campos do tipo derivado são usados para calcular o valor retornado. Se você chamar o método do GetHashCode tipo derivado, o valor retornado provavelmente não será adequado para uso como uma chave em uma tabela de hash. Além disso, se o valor de um ou mais desses campos for alterado, o valor retornado poderá se tornar inadequado para uso como uma chave em uma tabela de hash. Em ambos os casos, considere escrever sua própria implementação do GetHashCode método que representa mais de perto o conceito de um código hash para o tipo.

Para obter mais informações, consulte Object.GetHashCode e System.Collections.Hashtable.

Notas para o Windows Runtime

Quando você chama o GetHashCode método em uma estrutura Windows Runtime, ele fornece o comportamento padrão para tipos de valor que não substituem GetHashCode. Isso faz parte do suporte que o .NET fornece para o Windows Runtime (consulte Suporte do .NET para aplicativos da Windows Store e Windows Runtime). Windows Runtime estruturas não podem substituir GetHashCode, mesmo que sejam escritas com C# ou Visual Basic, porque não podem ter métodos. (Além disso, as estruturas no próprio Windows Runtime não herdam ValueType.) No entanto, eles parecem ter ToStringmétodos , Equalse GetHashCode quando você os usa em seu código C# ou Visual Basic, e o .NET fornece o comportamento padrão para esses métodos.

Aplica-se a