私は、このクラスの値のセマンティクスが(すみません)ひどいことを知っている次のコードIEquatable <T>の2つの等しいインスタンスがfalseを返すのはなぜですか?
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;
を考えてみましょう。私は通常、IEquatable<T>
の実装のC#のガイドラインに従います。このガイドラインでは、object.Equals(object obj)
もオーバーライドする必要があります。これはちょうど推測です。
はと B ので、私はEquals
を呼び出すときに、なぜ、それがobject.Equals(object obj)
、というよりもIEquatable<Rectangle>.Equals(Rectangle other)
を呼び出しているIEquatable<Rectangle>
、として宣言されていますか?
それは、IEquatable<T>
実装上object
実装を使用するには少し奇妙に思える
「IEquatable」に渡す理由がわからないので、「do not do」と言う以外に、コードの修正方法を教えてもらえません。 –