就像问题一样,我只是想知道为什么语言的设计者希望在匿名类型上实现Equals,类似于价值类型。这不是误导?为什么匿名类型等于实现比较字段?
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
}
乍一看,所有打印的布尔值应该是false。但是,当使用Person类型并使用匿名类型时,带有Equals调用的行会返回不同的值。
这是SO上为数不多的3个或更多答案的帖子之一,回答者的数量超过** 95k **,截至5月-23-2017。 – dotNET