Bạn cần ghi đè các phương thức Equals
và GetHashCode
trong lớp Pay
của mình, nếu không Intersect
sẽ không biết khi nào 2 trường hợp được coi là bằng nhau. Làm thế nào nó có thể đoán rằng nó là EventId
xác định sự bình đẳng? oldPay
và newPay
là các trường hợp khác nhau, do đó theo mặc định chúng không được coi là bằng nhau.
Bạn có thể ghi đè lên các phương pháp trong Pay
như thế này:
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;
}
lựa chọn khác là để thực hiện một IEqualityComparer<Pay>
và vượt qua nó như một tham số để 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());
Nguồn
2011-11-29 17:04:56
Giả sử trả bình đẳng là EventID, Số lượng và số lượng, không có gì phổ biến trong hai danh sách đó và do đó không có gì giao nhau. Nói cách khác, bạn chưa định nghĩa bình đẳng ở đây. –
Bạn có ý nghĩa gì đã không xác định sự bình đẳng ở đây? chỉ có phần tử khác là Amount = 100 – user570715
Không có gì trong câu hỏi cho biết _why_ 'oldpay' phải bằng' newpay'. –