Vous devez remplacer les Equals
et GetHashCode
méthodes dans votre classe Pay
, sinon Intersect
ne sait pas quand 2 cas sont considérés comme égaux. Comment pourrait-il deviner que c'est le EventId
qui détermine l'égalité? oldPay
et newPay
sont des instances différentes, donc par défaut, elles ne sont pas considérées comme égales.
Vous pouvez remplacer les méthodes Pay
comme ceci:
public override int GetHashCode()
{
return this.EventId;
}
public override bool Equals(object other)
{
if (other is Pay)
return ((Pay)other).EventId == this.EventId;
return false;
}
Une autre option consiste à mettre en œuvre un IEqualityComparer<Pay>
et le transmettre comme paramètre à Intersect
:
public class PayComparer : IEqualityComparer<Pay>
{
public bool Equals(Pay x, Pay y)
{
if (x == y) // same instance or both null
return true;
if (x == null || y == null) // either one is null but not both
return false;
return x.EventId == y.EventId;
}
public int GetHashCode(Pay pay)
{
return pay != null ? pay.EventId : 0;
}
}
...
var Result = nlist.Intersect(olist, new PayComparer());
En supposant que l'égalité de paiement est EventID, Number, AND Amount, il n'y a rien de commun dans ces deux listes et donc rien ne se croise. En d'autres termes, vous n'avez pas défini l'égalité ici. –
Que voulez-vous dire n'a pas défini l'égalité ici? seul élément différent est Amount = 100 – user570715
Il n'y a rien dans la question qui indique que _why_ 'oldpay' devrait être égal à' newpay'. –