, warum Equals()
Methode überprüfen Sie immer die Gleichheit zwischen zwei arrays
durch den Vergleich der Referenzen und nicht durch den Inhalt zu vergleichen?In C#, warum Equals() -Methode auf Arrays nur ihre Referenzen vergleichen, nicht ihre tatsächlichen Inhalt
Als Folge werden alle Methoden Equals()
bei deren Umsetzung (viel) Aufruf funktioniert nicht wie mit Arrays erwartet (es nicht vergleichen den Inhalt):
Beispiel:
int[] array1 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] array2 = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
var u = array1.Equals(array1); //true
var v = array1.Equals(array2); //false
var w = Array.Equals(array1, array2); //false
var x = (new List<int[]>(new int[][] { array1 })).Contains(array2); //false
var y = (new int[][] { array1 }).Any(x => x == array2); //false
var z = (new int[][] { array1, array2 }).Distinct().Count() == 1; //false
A möglich generische Möglichkeit, Arrays (keine Art) zu behandeln könnte sein:
In Object.Equals()
: wenn beide Typen zu vergleichen sind Arrays (von gleicher Länge), Elemente aufzählen (immer möglich), rufen Sie für jeden Artikel Equals()
. Wenn einer dieser Aufrufe false
zurückgibt, sind die Arrays unterschiedlich (geben Sie false
zurück), andernfalls geben Sie true
zurück.
Hinweis: Ich weiß über SequenceEqual()
, memcmp()
und andere Möglichkeiten, zwei Arrays zu vergleichen. Meine Frage ist nicht, wie man Arrays vergleicht. Ich möchte nur wissen, warum C #
Designer nicht wählen, um eine vollständige Array-Vergleich in Equals()
Methode zu implementieren.
Interessante Frage, auch wenn es schwer zu beantworten sein wird (die Schnittmenge von SO-Benutzern und C# -Teammitgliedern ist ein ziemlich kleines Set). – Jon
Wir könnten theoretisieren, aber da die Leute, die die Entscheidung getroffen haben, höchst unwahrscheinlich hierher kommen, kann keiner von uns realistisch die Frage beantworten, was das C# -Team dachte, selbst wenn wir Gründe dafür hätten, dass wir die Entscheidung nicht selbst treffen würden. – Servy
Betrachten Sie zwei Arrays mit jeweils 100.000 Elementen, die sehr komplexe Objekte enthalten, von denen jedes seine eigene überschriebene "Equals" -Methode besitzt, die eine Tiefeninspektion des Objekts durchführt, um auch die Gleichheit zu berücksichtigen. Sie könnten sich leicht in den Fuß schießen, indem Sie tun, was Sie vielleicht denken, ist eine einfache Überprüfung der Gleichheit. – CodingGorilla