В соответствии с this MSDN документацииПочему результаты методов Equals и ReferenceEquals отличаются, хотя переменные являются ссылочными типами?
Если текущий экземпляр является ссылочным типом, то Equals (Object) испытания метод для справки равенства, и вызов к Equals метод (Object) эквивалентно вызову метод ReferenceEquals.
тогда почему следующий код приводит к двум различным результатам вызовов метода Equals
метод, возвращающий Правда и ReferenceEquals
метод возвращения ложным, даже несмотря на то, obj
и obj1
является ссылочным типом, как IsClass
свойство возвращает истину.
using System;
public class Program
{
public static void Main()
{
var obj = new { a = 1, b = 1 };
var obj1 = new { a = 1, b = 1 };
Console.WriteLine("obj.IsClass: " + obj.GetType().IsClass);
Console.WriteLine("object.ReferenceEquals(obj, obj1): " + object.ReferenceEquals(obj, obj1));
Console.WriteLine("obj.Equals(obj1): " + obj.Equals(obj1));
}
}
Выходные:
obj.IsClass: Правда
object.ReferenceEquals (OBJ, obj1): Ложные
obj.Equals (obj1): Правда
Анонимные типы переопределяют Equals и GetHashCode –
Подробнее о том, с какой страницей вы связались - «Поскольку класс Object является базовым классом для всех типов в .NET Framework, метод Object.Equals (Object) предоставляет значение по умолчанию сравнение равенства для всех других типов. Однако типы часто переопределяют метод Equals для реализации равенства ценности ». –
Я пропустил то, что анонимные объекты переопределяют одинаковый метод. @JenishRabadiya btw, это было очевидно для моего собственного xD, поэтому я забыл упомянуть об этом. –