列表<t> .Except(List <t>)未按预期工作

时间:2016-04-13 18:11:40

标签: c# except iequalitycomparer

我有两个相同类型的列表。

一个列表是从文件加载并转换为正确类型的反序列化json对象。

另一个是由相同类型的对象创建的列表。

当我List2时,我希望List1中的所有内容都不会出现在List2

在这种情况下,List1会包含Enumerable<T>所拥有的所有内容,因此我希望看到大小为0的结果List2,但我只是看到了IEnumerable<Review> newReviews = reviews.Except(savedRvReviews, new ReviewComparer()); 的整体,好像比较从未发生过。

EqualityComparer

我还尝试使用public class ReviewComparer : IEqualityComparer<Review> { public bool Equals(Review x, Review y) { return x.ReviewID == y.ReviewID; } public int GetHashCode(Review rv) { return EqualityComparer<Review>.Default.GetHashCode(rv); } } ,代码如下:

List2

并得到了相同的结果。

通过List1迭代并通过LINQ查询搜索foreach (Review s in reviews) { var m = from k in savedRvReviews where k.ReviewID == s.ReviewID select k; if (m.Count() == 0) { // Do something with new reviews } } ,我得到预期的0结果。

Review

public class Review : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; [Browsable(false)] public string ReviewID { get; set; } public string ProductID { get; set; } public DateTime DateSubmitted { get; set; } public string ReviewTitle { get; set; } [Browsable(false)] public string ReviewDescription { get; set; } public int ReviewMark { get; set; } [Browsable(false)] public bool Approved { get; set; } } 类型的代码:

{{1}}

1 个答案:

答案 0 :(得分:0)

解决方案是在我的IEquatable<Review>类中添加Review接口并实现Equals方法:

    public bool Equals(Review rv)
    {
        return this.ReviewID == rv.ReviewID;
    }

我发布的其余代码工作正常,但这是我失踪的那篇文章。