Ich wurde kürzlich in eine große Codebasis eingeführt und bemerkte, dass alle String-Vergleiche mit String.Equals()
anstelle von ==
Was denken Sie, was ist der Grund dafür?
Ich wurde kürzlich in eine große Codebasis eingeführt und bemerkte, dass alle String-Vergleiche mit String.Equals()
anstelle von ==
Was denken Sie, was ist der Grund dafür?
Es gibt einen Bericht über dieser Artikel die für Sie interessant sein könnte, mit einigen Zitaten von Jon Skeet. Es scheint, dass die Verwendung ziemlich gleich ist.
Jon Skeet stellt fest, dass die Leistung der Instanz Equals "etwas besser ist, wenn die Saiten kurz sind - mit zunehmender Länge der Saiten wird dieser Unterschied völlig unbedeutend."
Ich möchte hinzufügen, dass es noch einen weiteren Unterschied gibt. Er hängt mit dem zusammen, was Andrew schreibt.
Es hängt auch mit einem SEHR ärgerlichen Fehler in unserer Software zusammen. Siehe das folgende vereinfachte Beispiel (ich habe auch die Nullprüfung weggelassen).
public const int SPECIAL_NUMBER = 213;
public bool IsSpecialNumberEntered(string numberTextBoxTextValue)
{
return numberTextBoxTextValue.Equals(SPECIAL_NUMBER)
}
Dies wird kompiliert und liefert immer false
. Das folgende Beispiel führt zu einem Kompilierfehler:
public const int SPECIAL_NUMBER = 213;
public bool IsSpecialNumberEntered(string numberTextBoxTextValue)
{
return (numberTextBoxTextValue == SPECIAL_NUMBER);
}
Wir hatten ein ähnliches Problem zu lösen, bei dem jemand Enums unterschiedlichen Typs mit Equals
. Sie werden dies VIELE Male durchlesen, bevor Sie erkennen, dass es die Ursache des Fehlers ist. Besonders wenn die Definition von SPECIAL_NUMBER
nicht in der Nähe des Problembereichs liegt.
Aus diesem Grund bin ich wirklich gegen die Verwendung von Equals in Situationen, in denen es nicht notwendig ist. Sie verlieren ein wenig an Typsicherheit.
Ich habe gerade meinen Kopf gegen eine Wand geschlagen und versucht, einen Fehler zu lösen, weil ich diese Seite gelesen habe und zu dem Schluss gekommen bin, dass es keinen bedeutsamen Unterschied gibt, obwohl es in der Praxis einen gibt, also werde ich diesen Link hier posten, für den Fall, dass jemand anderes feststellt, dass er unterschiedliche Ergebnisse mit == und gleich erhält.
Object == equality schlägt fehl, aber .Equals ist erfolgreich. Ergibt dies einen Sinn?
string a = "x";
string b = new String(new []{'x'});
Console.WriteLine("x == x " + (a == b));//True
Console.WriteLine("object x == x " + ((object)a == (object)b));//False
Console.WriteLine("x equals x " + (a.Equals(b)));//True
Console.WriteLine("object x equals x " + (((object)a).Equals((object)b)));//True
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.