Warum vergleicht die Equals-Implementierung für anonyme Typen Felder?
Ich frage mich nur, warum Designer der Sprache beschlossen haben, Equals auf anonymen Typen zu implementieren, ähnlich wieEquals
auf Werttypen. Ist es nicht irreführend?
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
}
Auf den ersten Blick sollten alle gedruckten Booleschen Werte falsch sein. Aber Zeilen mitEquals
Aufrufe geben unterschiedliche Werte zurück, wennPerson
Typ wird verwendet, und anonymer Typ wird verwendet.