我使用overriden 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?
'MyClass'應該重寫'GetHashCode',因爲它覆蓋'Equals'。甚至有一個編譯器警告它。 – Dirk
你也應該像這樣覆蓋'GetHashCode'方法:https://stackoverflow.com/a/38434457/2946329 –
所有的set方法都需要'GetHashCode'(在使用'Equals'之前)。但總的來說,你應該總是實現'GetHashCode' **和**'Equals'在一起 –