è necessario sostituire le Equals
e GetHashCode
metodi nella classe Pay
, altrimenti Intersect
non sa quando 2 istanze sono considerati uguali. Come potrebbe indovinare che è lo EventId
che determina l'uguaglianza? oldPay
e newPay
sono istanze diverse, quindi per impostazione predefinita non sono considerate uguali.
è possibile ignorare i metodi in Pay
come questo:
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;
}
Un'altra opzione è quella di implementare un IEqualityComparer<Pay>
e passarlo come parametro 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());
fonte
2011-11-29 17:04:56
Supponendo che l'uguaglianza di pagamento sia ID evento, numero e importo, non c'è niente di comune in questi due elenchi e quindi nulla interseca. In altre parole, non hai definito l'uguaglianza qui. –
Cosa intendi per non aver definito l'uguaglianza qui? solo un elemento diverso è Importo = 100 – user570715
Non c'è niente nella domanda che afferma che _why_ 'oldpay' dovrebbe essere uguale a' newpay'. –