就像問題一樣,我只是想知道爲什麼語言的設計者希望在匿名類型上實現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