Por que a implementação Equals para tipos anônimos compara campos?
Eu só estou querendo saber porque os designers da linguagem decidiram implementar o Equals em tipos anônimos similarmenteEquals
em tipos de valor. Não é enganoso?
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
public static void ProofThatAnonymousTypesEqualsComparesBackingFields()
{
var personOne = new { Name = "Paweł", Age = 18 };
var personTwo = new { Name = "Paweł", Age = 18 };
Console.WriteLine(personOne == personTwo); // false
Console.WriteLine(personOne.Equals(personTwo)); // true
Console.WriteLine(Object.ReferenceEquals(personOne, personTwo)); // false
var personaOne = new Person { Name = "Paweł", Age = 11 };
var personaTwo = new Person { Name = "Paweł", Age = 11 };
Console.WriteLine(personaOne == personaTwo); // false
Console.WriteLine(personaOne.Equals(personaTwo)); // false
Console.WriteLine(Object.ReferenceEquals(personaOne, personaTwo)); // false
}
À primeira vista, todos os valores booleanos impressos devem ser falsos. Mas linhas comEquals
chamadas retornam valores diferentes quandoPerson
tipo é usado e tipo anônimo é usado.