我有两个相同类型的列表。
一个列表是从文件加载并转换为正确类型的反序列化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}}
答案 0 :(得分:0)
解决方案是在我的IEquatable<Review>
类中添加Review
接口并实现Equals
方法:
public bool Equals(Review rv)
{
return this.ReviewID == rv.ReviewID;
}
我发布的其余代码工作正常,但这是我失踪的那篇文章。