Comparações de igualdade (guia de programação do 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 Object.ReferenceEquals 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 que os valores que estão contidos nos objetos são todas 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 Como: teste de igualdade de referência (identidade) (guia de programação do 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, testando a 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 de 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á nenhuma exigência que equivalência baseado em todos os campos em um tipo.Ele pode se basear em um subconjunto.Quando você compara os tipos que você não é proprietário, verifique se entender especificamente como equivalência é definida para esse tipo.Para obter mais informações sobre como definir a igualdade do valor de suas próprias classes e estruturas, consulte Como: definir o igualdade de valor para um tipo (guia de programação do C#).
Igualdade de valor para valores de ponto de flutuantes
Valores de ponto de comparações de igualdade de flutuantes (double e float) estão problemático devido a imprecision de aritmético de ponto flutuante em binários computadores.Para obter mais informações, consulte os comentários no tópico System.Double.
Tópicos relacionados
Título |
Descrição |
---|---|
Como: teste de igualdade de referência (identidade) (guia de programação do C#) |
Descreve como determinar se duas variáveis têm igualdade de referência. |
Como: definir o igualdade de valor para um tipo (guia de programação do C#) |
Descreve como fornecer uma definição personalizada de igualdade de valor para um tipo. |
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. |
|
Fornece informações sobre o sistema de tipos C# e links para informações adicionais. |