string s1 = "t";
string s2 = 't'.ToString();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning true
Qui restituisce lo stesso risultato. Ora, quando sto usando StringBuilder, non restituisce lo stesso valore. Qual è la ragione sottostante?Perché object.Equals e instanceobject.Equals non sono uguali
StringBuilder s1 = new StringBuilder();
StringBuilder s2 = new StringBuilder();
Console.WriteLine(s1.Equals(s2)); // returning true
Console.WriteLine(object.Equals(s1, s2)); // returning false
Edit1: La mia domanda di cui sopra risponde sotto. Durante questa discussione, tuttavia, scopriamo che StringBuilder non ha alcun metodo di sovrascrittura Equals nella sua implementazione. Quindi, quando chiamiamo StringBuilder.Equals, in realtà va a Object.Equals. Quindi, se qualcuno chiama StringBuilder.Equals e S1.Equals (S2) il risultato sarà diverso.
Buona cattura! In conclusione, 'StringBuilder' sembra dimenticare di sovrascrivere' Equals (oggetto) '. Sembra controintuitivo avere 'Equals (StringBuilder)' con un comportamento diverso da 'Equals (oggetto)'. – leppie