オーバーライドされたEqualsでクラスを作成しました。問題は、私のクラスでDistinctメソッドが動作しないことです。オーバーライドされたEqualsのクラスでは、別のメソッドが機能しません。
class MyClass
{
public int Item1 { get; private set; }
public int Item2 { get; private set; }
public MyClass(int item1, int item2)=>(Item1,Item2)=(item1,item2);
public override bool Equals(object obj)
{
var other = obj as MyClass;
if (other == null)
{
return false;
}
return (this.Item1 == other.Item1 && this.Item2 == other.Item2);
}
}
class Program
{
static void Main(string[] args)
{
MyClass x = new MyClass(1, 0);
MyClass y = new MyClass(1, 0);
var list = new List<MyClass>();
list.Add(x);
list.Add(y);
bool b = x.Equals(y)); //True
var distincts = list.Distinct(); //Doesn't work, contains both
}
}
どうすれば修正できますか、それではEquals in Distinctを使用しないのですか?あなたにもGetHashCode
をオーバーライドする必要が
'MyClass'は' Equals'をオーバーライドするので 'GetHashCode'もオーバーライドする必要があります。コンパイラの警告もあります。 – Dirk
また、次のように 'GetHashCode'メソッドをオーバーライドする必要があります:https://stackoverflow.com/a/38434457/2946329 –
' GetHashCode'( 'Equals'が使用される前)はすべての設定メソッドに必要です。しかし、一般的には、常に 'GetHashCode' **と** Equals'を実装してください。 –