Ich habe zwei Listen des gleichen Typs.Liste <T> .Except (Liste <T>) funktioniert nicht wie erwartet
Eine Liste ist ein deserialisiertes JSON-Objekt, das aus einer Datei geladen und in den richtigen Typ umgewandelt wird.
Die andere ist eine Liste von Objekten des gleichen Typs erstellt.
Als ich List2.Except(List1)
erwarte ich alles in List2
zu sehen, die nicht in List1
In diesem Fall ist, wird List2
alles haben, was List1
hat und nichts mehr, so dass ich erwarte, dass ein resultierendes Enumerable<T>
von Größe zu sehen 0, aber ich sehe nur die Gesamtheit von List2
, als ob der Vergleich nie passiert ist.
IEnumerable<Review> newReviews = reviews.Except(savedRvReviews, new ReviewComparer());
Ich versuchte auch, einen EqualityComparer
verwenden, Code unter:
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);
}
}
und bekam die gleichen Ergebnisse.
Iterieren durch List2
und List1
über eine LINQ-Abfrage suchen, bekomme ich die erwarteten Ergebnisse von 0.
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
}
}
-Code für Review
Typ:
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; }
}
Warum posten Sie nicht den Code, den Sie tun, außer in? –
ich habe es hinzugefügt, aber es ist nichts besonderes daran. – 5SK5
Wenn die Ausnahme nicht wie erwartet funktioniert und Sie sie richtig verwenden, haben Sie wahrscheinlich keinen get-Hash-Code implementiert und überschreiben Sie den Wert gleich –