CategoryProductsResult

CategoryProductsResult

我有一个包含对象的列表,但是这些对象不是列表中唯一的对象。我编写了以下代码以使它们在另一个列表中具有唯一性:

 foreach (CategoryProductsResult categoryProductsResult in categoryProductsResults.Where(categoryProductsResult => !resultSet.Contains(categoryProductsResult)))
 {
    resultSet.Add(categoryProductsResult);
 }

但是最后,resultSet与categoryProductsResults相同。

categoryProductsResult的第二行:

resultSet第一行:

如您所见,resultSet的第一行与categoryProductsResult的第二行相同,但是它将第二行添加到resultSet。

你有什么建议吗?

最佳答案

Contains使用默认的比较器来比较引用,因为您的类不会覆盖EqualsGetHashCode

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();

09-08 06:15