Partilhar via


Comparações de igualdade (guia de programação de C#)

Às vezes é necessário comparar dois valores de igualdade. Em alguns casos, você está testando igualdade do valor, também conhecido como equivalência, que significa que os valores que são contidos por duas variáveis são iguais. Em outros casos, você precisa determinar se duas variáveis de referência ao mesmo objeto subjacente na memória. Esse tipo de igualdade é chamado de a igualdade de referência, ou identidade. Este tópico descreve esses dois tipos de igualdade e fornece links para outros tópicos para obter mais informações.

Igualdade de referência

Igualdade de referência significa que duas referências de objeto se referem ao mesmo objeto subjacente. Isso pode ocorrer por meio de atribuição simples, como mostrado no exemplo a seguir.

using System;
class Test
{
    public int Num { get; set; }
    public string Str { get; set; }

    static void Main()
    {
        Test a = new Test() { Num = 1, Str = "Hi" };
        Test b = new Test() { Num = 1, Str = "Hi" };

        bool areEqual = System.Object.ReferenceEquals(a, b);
        // False:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Assign b to a.
        b = a;

        // Repeat calls with different results.
        areEqual = System.Object.ReferenceEquals(a, b);
        // True:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Keep the console open in debug mode.
        Console.WriteLine("Press any key to exit.");
        Console.ReadKey();
    }
}

Nesse código, dois objetos são criados, mas após a instrução de atribuição, as duas referências referem-se ao mesmo objeto. Portanto, eles têm igualdade de referência. Use o ObjectReferenceEquals() método para determinar se duas referências referência ao mesmo objeto.

O conceito de igualdade de referência se aplica somente aos tipos de referência. Objetos do tipo de valor não podem ter igualdade de referência, porque quando uma instância de um tipo de valor é atribuída a uma variável, uma cópia do valor é feita. Portanto, você nunca pode ter duas structs desemoldurados que se referem ao mesmo local na memória. Além disso, se você usar ReferenceEquals() para comparar dois tipos de valor, o resultado será sempre false, mesmo se os valores que estão contidos em objetos são todos idênticos. Isso ocorre porque cada variável for in a box em uma instância do objeto separado. Para obter mais informações, consulte How to: Testar a igualdade de referência (identidade) (guia de programação de C#).

Igualdade de valor

Igualdade de valor significa que dois objetos contêm o mesmo valor ou valores. Para um valor primitivo tipos como int ou bool, testes de igualdade de valor são simples. Você pode usar o = = operador, como mostrado no exemplo a seguir.

int a = GetOriginalValue();
int b = GetCurrentValue();

// Test for value equality. 
if( b == a) 
{
    // The two integers are equal.
}

Para a maioria dos outros tipos de teste de igualdade do valor é mais complexo porque ele requer que você entenda como o tipo define. Para classes e estruturas que têm vários campos ou propriedades, igualdade do valor é freqüentemente definida indicam que todos os campos ou propriedades têm o mesmo valor. Por exemplo, dois Point objetos poderão ser definidos como equivalente se pointA.X é igual a pointB.X e pointA.Y é igual a pointB.Y.

No entanto, não há nenhum requisito que equivalência baseado em todos os campos de um tipo. Ele pode ser baseado em um subconjunto. Quando você compara os tipos que você não possui, você deve verificar especificamente como equivalência é definida para esse tipo de entender. Para obter mais informações sobre como definir a igualdade do valor de suas próprias classes e estruturas, consulte How to: Definir o Valor de igualdade para um Tipo (guia de programação C#).

Igualdade de valor para os valores de ponto de flutuantes

Valores de ponto de comparações de igualdade de flutuantes (double e float) estão problemático devido imprecision do aritmético de ponto flutuante em computadores binários. Para obter mais informações, consulte os comentários no tópico System.Double.

Tópicos relacionados

Título

Descrição

How to: Testar a igualdade de referência (identidade) (guia de programação de C#)

Descreve como determinar se duas variáveis têm igualdade de referência.

How to: Definir o Valor de igualdade para um Tipo (guia de programação C#)

Descreve como fornecer uma definição personalizada de igualdade de valor para um tipo.

C# Programming Guide

Fornece links para informações detalhadas sobre importantes recursos de linguagem C# e recursos que estão disponíveis para C# por meio do.NET Framework.

Tipos (guia de programação de C#)

Fornece informações sobre o sistema de tipos do C# e links para informações adicionais.

Consulte também

Conceitos

C# Programming Guide