Betrachten Sie den folgenden CodeWarum geben zwei gleiche Instanzen von IEquatable <T> false zurück?
public class Rectangle : IEquatable<Rectangle>
{
public int Width { get; set; }
public int Height { get; set; }
public bool Equals(Rectangle other)
{
return Width == other.Width
&& Height == other.Height;
}
}
IEquatable<Rectangle> a = new Rectangle() { Width = 10, Height = 20 };
IEquatable<Rectangle> b = new Rectangle() { Width = 10, Height = 20 };
a.Equals(b); // returns false;
Ich weiß, dass der Wert Semantik dieser Klasse sind schrecklich (sorry). Normalerweise befolge ich die C# -Richtlinien für IEquatable<T>
Implementierung, die besagt, dass object.Equals(object obj)
auch überschrieben werden muss. - Das ist nur Spekulation.
Seit ein und b als IEquatable<Rectangle>
erklärt, warum, wenn ich Equals
nennen, es ist object.Equals(object obj)
Aufruf, anstatt IEquatable<Rectangle>.Equals(Rectangle other)
?
Es scheint ein wenig seltsam die object
Implementierung über die IEquatable<T>
Umsetzung zu verwenden (wieder, ich weiß, ich soll die Klassen Standard Equals(object obj)
Implementierung außer Kraft setzen ... das ist nur Spekulation, warum dies geschieht)
Da ich nicht verstehe, warum Sie es übergeben würden IEquatable 'zu Beginn mit kann ich Ihnen nicht sagen, wie Sie den Code zu beheben, außer zu sagen" do not do ". –