Secondo this MSDN documentazionePerché i risultati dei metodi Equals e ReferenceEquals differiscono anche se le variabili sono tipi di riferimento?
Se l'istanza corrente è un tipo di riferimento, i Equals (Object) Test metodo per l'uguaglianza di riferimento, e una chiamata al Equals metodo (oggetto) è equivalente a una chiamata a il metodo ReferenceEquals.
allora perché codice seguente genera due diversi frutto di metodo chiama Equals
metodo che restituisce il metodo Vero e ReferenceEquals
ritorno falsa, anche se il obj
e obj1
è il tipo di riferimento come IsClass
proprietà restituisce true.
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));
}
}
uscita:
obj.IsClass: Vero
object.ReferenceEquals (obj, obj1): False
obj.Equals (obj1): Vero
I tipi anonimi sovrascrivono Equals e GetHashCode –
Leggi di più della pagina a cui sei collegato: "Poiché la classe Object è la classe base per tutti i tipi in .NET Framework, il metodo Object.Equals (Object) fornisce il valore predefinito confronto di uguaglianza per tutti gli altri tipi, tuttavia i tipi spesso sovrascrivono il metodo Equals per implementare l'uguaglianza dei valori ". –
ho perso il punto in cui gli oggetti anonimi sovrascrivono lo stesso metodo. @JenishRabadiya era evidente per me stesso xD quindi ho dimenticato di dirlo. –