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.

questionAnswers(4)

yourAnswerToTheQuestion