! (Referenceequals ()) vs! = In Entity Framework 4
-
27-09-2019 - |
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()
?
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.
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