Pergunta

A menos que uma classe substitua especificamente o comportamento definido para objeto, Referenceequals e == Faça a mesma coisa... Compare referências.

Em setters de propriedades, eu geralmente usei o padrão

private MyType myProperty;

public MyType MyProperty
{
    set
    {
        if (myProperty != value)
        {
            myProperty = value;
            // Do stuff like NotifyPropertyChanged
        }
    }
}

No entanto, no código gerado pela estrutura da entidade, o if A declaração é substituída por

    if (!ReferenceEquals(myProperty, value))

O uso de referência é mais explícito (como acho que nem todos os programadores C# sabem que == faz a mesma coisa se não for substituída).

Existe alguma diferença que está me escapando entre os dois If-Variants? Eles talvez estejam representando a possibilidade de que os designers poco possam ter substituído ==?

Em suma, se eu não tive substituído ==, estou economizando usando! = em vez de ReferenceEquals()?

Foi útil?

Solução

Aqui estão a semântica diferente:

  • ReferenceEquals() Deve ser usado se você quer dizer que os objetos são exatamente iguais (verificação de identidade).
  • object.Equals() deve ser usado se você quiser que os objetos tenham o mesmo valor (verificação da igualdade)
  • ==() deve ser usado apenas para tipos imutáveis. Em seguida, use -o para testar a igualdade.

É claro que os colegas invertidos são destinados a de acordo.

Aqui está um resumo

Outras dicas

== deve testar para ver se a referência aponta para o mesmo local, enquanto os testes de referência para ver se eles contêm os mesmos dados

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top