我有一个类:
private class Part
{
public string Id { get; set; }
public string Class { get; set; }
public override bool Equals(object obj)
{
Part part = obj as Part;
return this.Id == part.Id;
}
}
我还有一个这个类的列表,所以我需要在这个列表上使用 distinct。这就是我所做的:
List<Part> parts = new List<Part>();
//adding items
parts = parts.Distinct().ToList();
但是没有任何反应。谁能告诉我怎么了?
最佳答案
当覆盖 Equals
时,您还必须覆盖 GetHashCode
:
private class Part
{
public string Id { get; set; }
public string Class { get; set; }
// Whenever overiding Equals
// You have to override this method too
public override int GetHashCode() {
return String.IsNullOrEmpty(Id) ? 0 : Id.GetHashCode();
}
public override bool Equals(object obj)
{
Part part = obj as Part;
// if obj is not of Part you should return false
if (Object.ReferenceEquals(null, part))
return false;
return this.Id == part.Id;
}
}
不当行为的原因是 Distinct
first tests GetHashCode
并且只有这样 Equals
。
关于c# - 与我类(class)的名单不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486761/