我有一个包含对象的列表,但是这些对象不是列表中唯一的对象。我编写了以下代码以使它们在另一个列表中具有唯一性:
foreach (CategoryProductsResult categoryProductsResult in categoryProductsResults.Where(categoryProductsResult => !resultSet.Contains(categoryProductsResult)))
{
resultSet.Add(categoryProductsResult);
}
但是最后,resultSet与categoryProductsResults相同。
categoryProductsResult的第二行:
resultSet第一行:
如您所见,resultSet的第一行与categoryProductsResult的第二行相同,但是它将第二行添加到resultSet。
你有什么建议吗?
最佳答案
Contains
使用默认的比较器来比较引用,因为您的类不会覆盖Equals
和GetHashCode
。
class CategoryProductsResult
{
public string Name { get; set; }
// ...
public override bool Equals(object obj)
{
if(obj == null)return false;
CategoryProductsResult other = obj as CategoryProductsResult;
if(other == null)return false;
return other.Name == this.Name;
}
public override int GetHashCode()
{
return Name.GetHashCode();
}
}
现在您可以简单地使用:
resultSet = categoryProductsResults.Distinct().ToList();